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

使用多個servlet時Spring security需要指明路由匹配策略問題

 更新時間:2024年08月14日 10:53:41   作者:mosplus  
這篇文章主要介紹了使用多個servlet時Spring security需要指明路由匹配策略問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

多個servlet時Spring security需要指明路由匹配策略

項目原本是 SpringBoot-3.1.3 + druid-1.2.21 ,并且 Druid 開啟了可視化監(jiān)控頁 stat-view-servlet 。

將項目升級到 SpringBoot-3.1.4 后,啟動項目時報錯。

摘取部分內(nèi)容:

Failed to instantiate [org.springframework.security.web.SecurityFilterChain]: Factory method ‘filterChain’ threw exception with message: This method cannot decide whether these patterns are Spring MVC patterns or not. If this endpoint is a Spring MVC endpoint, please use requestMatchers(MvcRequestMatcher); otherwise, please use requestMatchers(AntPathRequestMatcher).

This is because there is more than one mappable servlet in your servlet context: {org.springframework.web.servlet.DispatcherServlet=[/], com.alibaba.druid.support.jakarta.StatViewServlet=[/druid/*]}.

原因分析

錯誤信息可以看出來配置 Spring security 的放行策略時路由匹配的策略選擇不當(dāng),

根據(jù)spring官方在關(guān)于 CVE-2023-34035 的安全報告中提到

Spring Security versions 5.8 prior to 5.8.5, 6.0 prior to 6.0.5 and 6.1 prior to 6.1.2 could be susceptible to authorization rule misconfiguration if the application uses or and multiple servlets, one of them being Spring MVC’s DispatcherServlet.

如果應(yīng)用程序使用或和多個servlet(其中一個是Spring MVC的DispatcherServlet),則Spring Security 5.8.5之前的5.8版本、6.0.5之前的6.0版本和6.1.2之前的6.1版本可能容易受到授權(quán)規(guī)則錯誤配置的影響。

即除了 DispatcherServlet 以外,還存在其他 Servlet 時, Spring security 的路由匹配策略需要明確哪些路由模式是Spring MVC的。

修復(fù)問題

  • 例如舊版放行路徑使用的是
http.authorizeHttpRequests(authorize -> authorize.requestMatchers("/user/register").permitAll())
  • 改為
// MvcRequestMatcher策略
authorize.requestMatchers(new MvcRequestMatcher(new HandlerMappingIntrospector(), "/user/register")).permitAll()
                           
// AntPathRequestMatcher策略
authorize.requestMatchers(new AntPathRequestMatcher("/user/register")).permitAll()

其中 MvcRequestMatcherAntPathRequestMatcher 是兩種不同的匹配規(guī)則。

具體概念不再贅述,核心點就是 MvcRequestMatcher 基于 DispatcherServlet 進(jìn)行匹配。

路由策略區(qū)別

調(diào)整放行 Druid 的路徑,使用 MvcRequestMatcher 策略匹配,正常啟動。

但是訪問網(wǎng)頁的時候發(fā)現(xiàn)放行沒生效,被 Spring security 攔截了,需要認(rèn)證才能訪問,調(diào)整為 AntPathRequestMatcher 則是正常放行。

因為 Druid 提供了自己的監(jiān)控數(shù)據(jù)的 Servlet ,其是作為一個獨立的 Servlet 映射到容器中,而并非通過 DispatcherServlet ,所以放行 Druid 就需要使用 AntPathRequestMatcher 方式。

authorize.requestMatchers(new AntPathRequestMatcher("/druid/**")).permitAll()

而對于 Swagger,通常它的頁面和API文檔都會被包括在 Spring MVC 的控制器里面,并且其URL路徑會通過 @RequestMapping 注解映射,所以使用 MvcRequestMatcherAntPathRequestMatcher 都可以正確匹配到。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java操作Word文檔的全面指南

    Java操作Word文檔的全面指南

    在Java開發(fā)中,操作Word文檔是常見的業(yè)務(wù)需求,廣泛應(yīng)用于合同生成、報表輸出、通知發(fā)布、法律文書生成、病歷模板填寫等場景,本文將全面介紹Java操作Word文檔的主流方案,需要的朋友可以參考下
    2025-11-11
  • java字節(jié)流知識點總結(jié)

    java字節(jié)流知識點總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于java字節(jié)流的相關(guān)知識點內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)參考下。
    2019-07-07
  • java復(fù)制文件的4種方式及拷貝文件到另一個目錄下的實例代碼

    java復(fù)制文件的4種方式及拷貝文件到另一個目錄下的實例代碼

    這篇文章主要介紹了java復(fù)制文件的4種方式,通過實例帶給大家介紹了java 拷貝文件到另一個目錄下的方法,需要的朋友可以參考下
    2018-06-06
  • Java中String類使用方法總結(jié)

    Java中String類使用方法總結(jié)

    這篇文章主要介紹了Java中String類的使用方法,文章簡單易懂,結(jié)尾有實例代碼幫助大家理解學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 詳解基于java的Socket聊天程序——初始設(shè)計(附demo)

    詳解基于java的Socket聊天程序——初始設(shè)計(附demo)

    本篇文章主要介紹了Socket聊天程序——初始設(shè)計(附demo),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • MyBatis源碼淺析(一)開篇

    MyBatis源碼淺析(一)開篇

    源碼的學(xué)習(xí)好處多多,Mybatis源碼量少、邏輯簡單。下面將通過本文給大家詳解,低mybatis源碼淺析感興趣的朋友一起看看吧
    2016-11-11
  • idea聚合工程搭建過程詳解

    idea聚合工程搭建過程詳解

    本章主要以order訂單服務(wù)來遠(yuǎn)程調(diào)用payment支付服務(wù)為例,當(dāng)然這里只是簡單的一個遠(yuǎn)程調(diào)用,沒有太復(fù)雜的邏輯,重點是要掌握的是maven的聚合工程搭建,微服務(wù)分模塊的思想,每一個步驟我都會詳細(xì)記錄,并且文章下方還提供了git源碼地址
    2022-06-06
  • 詳解SpringBoot容器的生命周期

    詳解SpringBoot容器的生命周期

    在使用SpringBoot進(jìn)行開發(fā)時,我們經(jīng)常需要對Spring容器的生命周期進(jìn)行了解和掌握,本文將介紹SpringBoot容器的生命周期,包括容器的創(chuàng)建、初始化、銷毀等過程,并提供相應(yīng)的代碼示例
    2023-06-06
  • Spring整合JUnit詳解

    Spring整合JUnit詳解

    Spring?是目前主流的?Java?Web?開發(fā)框架,是?Java?世界最為成功的框架。該框架是一個輕量級的開源框架,這篇文章主要介紹如何配置數(shù)據(jù)源、注解開發(fā)以及整合Junit,感興趣的同學(xué)可以參考一下
    2023-04-04

最新評論

蓬莱市| 自治县| 名山县| 互助| 罗定市| 隆回县| 东乡县| 包头市| 博客| 陕西省| 鱼台县| 铁岭县| 太原市| 城市| 台州市| 桃江县| 乌苏市| 大悟县| 抚州市| 雅安市| 靖远县| 永年县| 银川市| 盈江县| 泰和县| 慈溪市| 临桂县| 无极县| 瑞安市| 贞丰县| 兴文县| 柳江县| 河津市| 洛川县| 万盛区| 丁青县| 阿拉尔市| 苍南县| 永登县| 湖北省| 安西县|