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

使用多個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 的放行策略時路由匹配的策略選擇不當,

根據(jù)spring官方在關于 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.

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

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

修復問題

  • 例如舊版放行路徑使用的是
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 進行匹配。

路由策略區(qū)別

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

但是訪問網(wǎng)頁的時候發(fā)現(xiàn)放行沒生效,被 Spring security 攔截了,需要認證才能訪問,調(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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringMVC使用MultipartFile實現(xiàn)文件上傳

    SpringMVC使用MultipartFile實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了SpringMVC使用MultipartFile實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 批量將現(xiàn)有Jar包上傳到Maven私服

    批量將現(xiàn)有Jar包上傳到Maven私服

    今天小編就為大家分享一篇關于批量將現(xiàn)有Jar包上傳到Maven私服,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 詳解如何Java中實現(xiàn)Excel的注釋和批注

    詳解如何Java中實現(xiàn)Excel的注釋和批注

    注釋及批注是?Excel?中比較常用的功能,這篇文章主要為大家詳細介紹了如何在Java中實現(xiàn)Excel的注釋和批注,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • thymeleaf實現(xiàn)前后端數(shù)據(jù)交換的示例詳解

    thymeleaf實現(xiàn)前后端數(shù)據(jù)交換的示例詳解

    Thymeleaf?是一款用于渲染?XML/XHTML/HTML5?內(nèi)容的模板引擎,當通過?Web?應用程序訪問時,Thymeleaf?會動態(tài)地替換掉靜態(tài)內(nèi)容,使頁面動態(tài)顯示,這篇文章主要介紹了thymeleaf實現(xiàn)前后端數(shù)據(jù)交換,需要的朋友可以參考下
    2022-07-07
  • IDEA如何解決代碼沒有提示問題

    IDEA如何解決代碼沒有提示問題

    文章介紹了如何解決IDEA中代碼提示功能缺失的問題,首先,需要調(diào)整快捷鍵設置,將CyclicExpandWord鍵映射為Ctrl+/,其次,確保輸入框中設置為Basic,然后添加鍵盤快捷鍵Alt+/,如果問題依然存在,可能是由于電腦省電模式導致的,需要取消相關設置
    2024-11-11
  • Java 是如何讀取和寫入瀏覽器Cookies的實例詳解

    Java 是如何讀取和寫入瀏覽器Cookies的實例詳解

    這篇文章主要介紹了Java 是如何讀取和寫入瀏覽器Cookies的實例的相關資料,需要的朋友可以參考下
    2016-09-09
  • JVM與操作系統(tǒng)之間的關系詳解

    JVM與操作系統(tǒng)之間的關系詳解

    JVM與操作系統(tǒng)之間是依賴與被依賴的關系,JVM依賴于操作系統(tǒng)提供的資源和服務,同時JVM也起到了抽象與隔離的作用,為Java程序提供了一個統(tǒng)一的、與平臺無關的運行環(huán)境,提高了Java程序的安全性
    2025-03-03
  • java實現(xiàn)肯德基收銀系統(tǒng)

    java實現(xiàn)肯德基收銀系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)肯德基收銀系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • mybatis update更新字段的使用操作

    mybatis update更新字段的使用操作

    這篇文章主要介紹了mybatis update更新字段的使用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java實例講解動態(tài)代理

    Java實例講解動態(tài)代理

    動態(tài)代理指的是,代理類和目標類的關系在程序運行的時候確定的,客戶通過代理類來調(diào)用目標對象的方法,是在程序運行時根據(jù)需要動態(tài)的創(chuàng)建目標類的代理對象。本文將通過案例詳細講解一下動態(tài)代理,需要的可以參考一下
    2022-06-06

最新評論