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

Quarkus中filter過濾器跨域cors問題解決方案

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

前言

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

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

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

web依賴

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

過濾器filter開發(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("攔截到請求了");
    }
    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
        System.out.println("攔截到響應(yīng)了");
    }
}

實(shí)現(xiàn)ContainerRequestFilter、ContainerResponseFilter接口,可以分別攔截請求和響應(yīng)。最后使用@Provider注解標(biāo)記,@Priority注解用于表明優(yōu)先級,值越大,優(yōu)先級越高。前面已經(jīng)說過,Quarkus雖然使用了resteasy,但是請求是使用vert'x來接收的,所以在攔截器實(shí)現(xiàn)里,可以通過上下文信息拿到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中解決跨域問題,可以從兩個層面來分析,一個是resteasy的角度。resteasy中內(nèi)置了CorsFilter過濾器,我們只需要激活它即可解決跨域問題。如:

/**
 * @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的角度來實(shí)現(xiàn)的,代碼見io.quarkus.vertx.http.runtime.cors.CORSFilter。從vertx的handler就攔截到了請求并做了跨域處理,但是跨域功能默認(rèn)不是開啟的,我們可以基于以下的配置來激活它,并進(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過濾器跨域cors問題解決方案的詳細(xì)內(nèi)容,更多關(guān)于Quarkus中filter過濾器跨域cors的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • kafka 啟動報錯 missingTopicsFatal is true的解決

    kafka 啟動報錯 missingTopicsFatal is true的解決

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

    Java pdu短信解碼全面解析

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

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

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

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

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

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

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

    Java基礎(chǔ)泛型詳情

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

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

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

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

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

    MyBatis高級映射ResultMap解決屬性問題

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

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

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

最新評論