欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Quarkus中filter過(guò)濾器跨域cors問(wèn)題解決方案

 更新時(shí)間:2022年02月23日 14:59:47   作者:kl  
這篇文章主要為大家介紹了Quarkus中filter過(guò)濾器跨域cors問(wèn)題的解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

Quarkus中的web模塊是基于java標(biāo)準(zhǔn)web規(guī)范jax-rs構(gòu)建的,實(shí)現(xiàn)則選用了jboss的resteasy。這部分只是請(qǐng)求路由轉(zhuǎn)發(fā)部分實(shí)現(xiàn)。真正的請(qǐng)求接收則使用了eclipse開(kāi)源的vert.x框架,底層也是基于netty的一個(gè)響應(yīng)式開(kāi)發(fā)框架。Quarkus將vert.x和resteasy集成在了一起,所以支持響應(yīng)式和非響應(yīng)式應(yīng)用混合開(kāi)發(fā),這也是Quarkus的一大賣點(diǎn)?;谝陨系恼J(rèn)知,我們來(lái)看看在Quarkus中,怎么寫(xiě)過(guò)濾器和解決跨域的問(wèn)題

resteasy4.4.5開(kāi)發(fā)文檔:https://docs.jboss.org/resteasy/docs/4.5.5.Final

vert'x開(kāi)發(fā)文檔:https://vertx.io/docs/vertx-web/java/

web依賴

<dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>

過(guò)濾器filter開(kāi)發(fā)

resteasy的filter

/**
 * @author kl : http://kailing.pub
 * @version 1.0
 * @date 2020/7/9 15:34
 */
@Priority(Priorities.USER + 1)
@Provider
public class MyFilter implements ContainerRequestFilter, ContainerResponseFilter {
    private volatile CurrentVertxRequest currentVertxRequest;
    CurrentVertxRequest currentVertxRequest() {
        if (currentVertxRequest == null) {
            currentVertxRequest = CDI.current().select(CurrentVertxRequest.class).get();
        }
        return currentVertxRequest;
    }
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        RoutingContext httpServerRequest = this.currentVertxRequest().getCurrent();
        String str = httpServerRequest.getBodyAsString();
        JsonObject jsonObject = httpServerRequest.getBodyAsJson();
        RequestImpl request = (RequestImpl) requestContext.getRequest();
        System.out.println("攔截到請(qǐng)求了");
    }
    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
        System.out.println("攔截到響應(yīng)了");
    }
}

實(shí)現(xiàn)ContainerRequestFilter、ContainerResponseFilter接口,可以分別攔截請(qǐng)求和響應(yīng)。最后使用@Provider注解標(biāo)記,@Priority注解用于表明優(yōu)先級(jí),值越大,優(yōu)先級(jí)越高。前面已經(jīng)說(shuō)過(guò),Quarkus雖然使用了resteasy,但是請(qǐng)求是使用vert'x來(lái)接收的,所以在攔截器實(shí)現(xiàn)里,可以通過(guò)上下文信息拿到vert'x的路由信息RoutingContext

vertx的filter

/**
 * @author kl : http://kailing.pub
 * @version 1.0
 * @date 2020/7/9 18:15
 */
@ApplicationScoped
public class MyFilter {
    public void initfilter(@Observes Filters filters) {
        filters.register(routingContext -> {
            HttpServerRequest httpServerRequest = routingContext.request();
            ForkJoinPool.commonPool().submit(()->{
                System.out.println("進(jìn)入vertx攔截器,下面是header參數(shù):");
            });
            httpServerRequest.headers().forEach(stringStringEntry -> {
                System.out.println("key:"+stringStringEntry.getKey() +",value:"+stringStringEntry.getValue());
            });
            routingContext.next();//這一句不能漏掉,讓攔截器繼續(xù)往下走的邏輯
        }, 100);
    }
}

Quarkus中的跨域

1、Quarkus中解決跨域問(wèn)題,可以從兩個(gè)層面來(lái)分析,一個(gè)是resteasy的角度。resteasy中內(nèi)置了CorsFilter過(guò)濾器,我們只需要激活它即可解決跨域問(wèn)題。如:

/**
 * @author kl : http://kailing.pub
 * @version 1.0
 * @date 2020/7/9 16:46
 */
@Provider
public class CorsFilter extends org.jboss.resteasy.plugins.interceptors.CorsFilter {
    public CorsFilter() {
        super.setAllowedMethods("OPTIONS, GET, POST, DELETE, PUT, PATCH");
        super.setAllowedHeaders("*");
        super.getAllowedOrigins().add("*");
    }
}

2、Quarkus本身也做了跨域的解決方案,是基于vert't的角度來(lái)實(shí)現(xiàn)的,代碼見(jiàn)io.quarkus.vertx.http.runtime.cors.CORSFilter。從vertx的handler就攔截到了請(qǐng)求并做了跨域處理,但是跨域功能默認(rèn)不是開(kāi)啟的,我們可以基于以下的配置來(lái)激活它,并進(jìn)行相關(guān)的設(shè)置:

quarkus.http.cors=true
quarkus.http.cors.origins=*
quarkus.http.cors.headers=accept, authorization, content-type, x-requested-with
quarkus.http.cors.methods=GET, OPTIONS

以上就是Quarkus中filter過(guò)濾器跨域cors問(wèn)題解決方案的詳細(xì)內(nèi)容,更多關(guān)于Quarkus中filter過(guò)濾器跨域cors的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • kafka 啟動(dòng)報(bào)錯(cuò) missingTopicsFatal is true的解決

    kafka 啟動(dòng)報(bào)錯(cuò) missingTopicsFatal is true的解決

    這篇文章主要介紹了kafka 啟動(dòng)報(bào)錯(cuò) missingTopicsFatal is true的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java pdu短信解碼全面解析

    Java pdu短信解碼全面解析

    本文是根據(jù)python的方法改寫(xiě)的pdu短信解碼,非常不錯(cuò),代碼簡(jiǎn)單易懂具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-10-10
  • SpringBoot整合Web開(kāi)發(fā)之文件上傳與@ControllerAdvice

    SpringBoot整合Web開(kāi)發(fā)之文件上傳與@ControllerAdvice

    @ControllerAdvice注解是Spring3.2中新增的注解,學(xué)名是Controller增強(qiáng)器,作用是給Controller控制器添加統(tǒng)一的操作或處理。對(duì)于@ControllerAdvice,我們比較熟知的用法是結(jié)合@ExceptionHandler用于全局異常的處理,但其作用不止于此
    2022-08-08
  • 詳解Java MyBatis 插入數(shù)據(jù)庫(kù)返回主鍵

    詳解Java MyBatis 插入數(shù)據(jù)庫(kù)返回主鍵

    這篇文章主要介紹了詳解Java MyBatis 插入數(shù)據(jù)庫(kù)返回主鍵,有興趣的可以了解一下。
    2017-01-01
  • 關(guān)于intellij idea打開(kāi)就閃退或關(guān)閉詳細(xì)解決辦法

    關(guān)于intellij idea打開(kāi)就閃退或關(guān)閉詳細(xì)解決辦法

    這篇文章主要介紹了關(guān)于intellij idea打開(kāi)就閃退或關(guān)閉詳細(xì)解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java基礎(chǔ)泛型詳情

    Java基礎(chǔ)泛型詳情

    這篇文章主要介紹了Java基礎(chǔ)泛型詳情,泛型是JDK5中引入的特性,它提供了編譯時(shí)類型安全檢測(cè)機(jī)制,該機(jī)制允許在編譯時(shí)檢測(cè)到非法的類型,下面文章的詳細(xì)介紹,需要的朋友可以參考一下
    2022-04-04
  • SpringBoot全局異常與數(shù)據(jù)校驗(yàn)的方法

    SpringBoot全局異常與數(shù)據(jù)校驗(yàn)的方法

    這篇文章主要介紹了SpringBoot全局異常與數(shù)據(jù)校驗(yàn)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • SpringCloud Config分布式配置中心使用教程介紹

    SpringCloud Config分布式配置中心使用教程介紹

    springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過(guò)接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用
    2022-12-12
  • MyBatis高級(jí)映射ResultMap解決屬性問(wèn)題

    MyBatis高級(jí)映射ResultMap解決屬性問(wèn)題

    對(duì)于數(shù)據(jù)庫(kù)中對(duì)表的增刪改查操作,我們知道增刪改都涉及的是單表,而只有查詢操作既可以設(shè)計(jì)到單表操作又可以涉及到多表操作,所以對(duì)于輸入映射parameterType而言是沒(méi)有所謂的高級(jí)映射的,也就是說(shuō)高級(jí)映射只針對(duì)于輸出映射
    2023-02-02
  • SpringBoot整合RabbitMQ的5種模式的注解綁定詳解

    SpringBoot整合RabbitMQ的5種模式的注解綁定詳解

    這篇文章主要介紹了SpringBoot整合RabbitMQ的5種模式的注解綁定詳解,RabbitMQ 是一個(gè)消息中間件,它接收消息并且轉(zhuǎn)發(fā),是"消費(fèi)-生產(chǎn)者模型"的一個(gè)典型的代表,一端往消息隊(duì)列中不斷的寫(xiě)入消息,而另一端則可以讀取或者訂閱隊(duì)列中的消息,需要的朋友可以參考下
    2024-01-01

最新評(píng)論