欧美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 的放行策略時路由匹配的策略選擇不當(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 進行匹配。

路由策略區(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)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    mybatis update更新字段的使用操作

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

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

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

最新評論