最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

Quarkus中的web模塊是基于java標準web規(guī)范jax-rs構建的,實現則選用了jboss的resteasy。這部分只是請求路由轉發(fā)部分實現。真正的請求接收則使用了eclipse開源的vert.x框架,底層也是基于netty的一個響應式開發(fā)框架。Quarkus將vert.x和resteasy集成在了一起,所以支持響應式和非響應式應用混合開發(fā),這也是Quarkus的一大賣點。基于以上的認知,我們來看看在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("攔截到響應了");
    }
}

實現ContainerRequestFilter、ContainerResponseFilter接口,可以分別攔截請求和響應。最后使用@Provider注解標記,@Priority注解用于表明優(yōu)先級,值越大,優(yōu)先級越高。前面已經說過,Quarkus雖然使用了resteasy,但是請求是使用vert'x來接收的,所以在攔截器實現里,可以通過上下文信息拿到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("進入vertx攔截器,下面是header參數:");
            });
            httpServerRequest.headers().forEach(stringStringEntry -> {
                System.out.println("key:"+stringStringEntry.getKey() +",value:"+stringStringEntry.getValue());
            });
            routingContext.next();//這一句不能漏掉,讓攔截器繼續(xù)往下走的邏輯
        }, 100);
    }
}

Quarkus中的跨域

1、Quarkus中解決跨域問題,可以從兩個層面來分析,一個是resteasy的角度。resteasy中內置了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的角度來實現的,代碼見io.quarkus.vertx.http.runtime.cors.CORSFilter。從vertx的handler就攔截到了請求并做了跨域處理,但是跨域功能默認不是開啟的,我們可以基于以下的配置來激活它,并進行相關的設置:

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問題解決方案的詳細內容,更多關于Quarkus中filter過濾器跨域cors的資料請關注腳本之家其它相關文章!

相關文章

  • 概述java虛擬機中類的加載器及類加載過程

    概述java虛擬機中類的加載器及類加載過程

    這篇文章主要介紹了概述java虛擬機中類的加載器及類加載過程,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • @JsonFormat 實現日期格式自動格式化

    @JsonFormat 實現日期格式自動格式化

    這篇文章主要介紹了@JsonFormat 實現日期格式自動格式化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java多線程 生產者消費者模型實例詳解

    Java多線程 生產者消費者模型實例詳解

    這篇文章主要介紹了Java多線程 生產者消費者模型實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 如何使用Java中的Optional

    如何使用Java中的Optional

    這篇文章主要介紹了如何使用Java中的Optional,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • SpringBoot整合Minio的過程(支持公有及私有bucket)

    SpringBoot整合Minio的過程(支持公有及私有bucket)

    Bucket 是存儲Object的邏輯空間,每個Bucket之間的數據是相互隔離的,對用戶而言,相當于存放文件的頂層文件夾,這篇文章主要介紹了SpringBoot整合Minio的過程(支持公有及私有bucket),需要的朋友可以參考下
    2025-03-03
  • SpringBoot對靜態(tài)資源的映射規(guī)則詳解解讀

    SpringBoot對靜態(tài)資源的映射規(guī)則詳解解讀

    這篇文章主要介紹了SpringBoot對靜態(tài)資源的映射規(guī)則詳解解讀,在Spring Boot中,映射規(guī)則是用來定義URL與控制器方法之間的映射關系的,通過映射規(guī)則,可以將特定的URL請求映射到相應的控制器方法上,從而實現請求的處理和響應的返回,需要的朋友可以參考下
    2023-10-10
  • Java壓縮解壓zip技術_動力節(jié)點Java學院整理

    Java壓縮解壓zip技術_動力節(jié)點Java學院整理

    Java解壓縮zip - 多個文件(包括文件夾),對多個文件和文件夾進行壓縮,對復雜的文件目錄進行解壓。壓縮方法使用的是可變參數,可以壓縮1到多個文件
    2017-05-05
  • Hibernate Validation自定義注解校驗的實現

    Hibernate Validation自定義注解校驗的實現

    這篇文章主要介紹了Hibernate Validation自定義注解校驗的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • java實現簡單的掃雷小游戲

    java實現簡單的掃雷小游戲

    這篇文章主要為大家詳細介紹了java實現簡單的掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 關于@JsonProperty和@JSONField注解的區(qū)別及用法

    關于@JsonProperty和@JSONField注解的區(qū)別及用法

    這篇文章主要介紹了關于@JsonProperty和@JSONField注解的區(qū)別及用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

海城市| 巴林左旗| 禄丰县| 镇江市| 晋宁县| 阿尔山市| 武清区| 宁晋县| 石屏县| 聂拉木县| 龙川县| 长宁区| 横山县| 娱乐| 宜君县| 韶关市| 玉田县| 华亭县| 上饶县| 溆浦县| 中方县| 始兴县| 文昌市| 织金县| 海城市| 高清| 衡南县| 邛崃市| 镇坪县| 察雅县| 桐梓县| 建平县| 北宁市| 柳林县| 阿克| 密山市| 察哈| 南汇区| 新晃| 大方县| 灌云县|