最新国产好看的视频,伊人天堂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 的放行策略時路由匹配的策略選擇不當,

根據(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的。

修復問題

  • 例如舊版放行路徑使用的是
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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(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)容,有興趣的朋友們跟著學習參考下。
    2019-07-07
  • java復制文件的4種方式及拷貝文件到另一個目錄下的實例代碼

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

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

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

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

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

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

    MyBatis源碼淺析(一)開篇

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

    idea聚合工程搭建過程詳解

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

    詳解SpringBoot容器的生命周期

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

    Spring整合JUnit詳解

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

最新評論

合川市| 台南市| 安泽县| 邢台市| 黑龙江省| 鹤峰县| 广州市| 湘乡市| 高淳县| 柞水县| 安庆市| 怀集县| 海兴县| 民勤县| 临武县| 南开区| 黄冈市| 五原县| 台东县| 思茅市| 靖西县| 仪陇县| 宜宾市| 崇明县| 新乐市| 宣汉县| 周口市| 隆回县| 衡山县| 原阳县| 蓬莱市| 永济市| 高碑店市| 盐边县| 瓦房店市| 资中县| 枣强县| 泰兴市| 荥经县| 浑源县| 大丰市|