日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring security源码分析之一springSecurityFilterChain

發布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring security源码分析之一springSecurityFilterChain 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. spring和spring security的集成,配置web.xml如下:

<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-security.xml</param-value></context-param><!-- Spring Security --><filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping>

2.?springSecurityFilterChain的來龍去脈

? ?在org.springframework.security.config包里定義了該名稱:

/** External alias for FilterChainProxy bean, for use in web.xml files */public static final String SPRING_SECURITY_FILTER_CHAIN = "springSecurityFilterChain"; 使用springSecurityFilterChain的地方:HttpSecurityBeanDefinitionParser.java 該類建立
Http 安全體系:過濾器棧和受保護的url。

static void registerFilterChainProxyIfNecessary(ParserContext pc, Object source) {if (pc.getRegistry().containsBeanDefinition(BeanIds.FILTER_CHAIN_PROXY)) {return;}// Not already registered, so register the list of filter chains and the FilterChainProxyBeanDefinition listFactoryBean = new RootBeanDefinition(ListFactoryBean.class);listFactoryBean.getPropertyValues().add("sourceList", new ManagedList());pc.registerBeanComponent(new BeanComponentDefinition(listFactoryBean, BeanIds.FILTER_CHAINS));BeanDefinitionBuilder fcpBldr = BeanDefinitionBuilder.rootBeanDefinition(FilterChainProxy.class);fcpBldr.getRawBeanDefinition().setSource(source);fcpBldr.addConstructorArgReference(BeanIds.FILTER_CHAINS);fcpBldr.addPropertyValue("filterChainValidator", new RootBeanDefinition(DefaultFilterChainValidator.class));BeanDefinition fcpBean = fcpBldr.getBeanDefinition();pc.registerBeanComponent(new BeanComponentDefinition(fcpBean, BeanIds.FILTER_CHAIN_PROXY));pc.getRegistry().registerAlias(BeanIds.FILTER_CHAIN_PROXY, BeanIds.SPRING_SECURITY_FILTER_CHAIN);}}

從上面的代碼可以看出,springSecurityFilterChain是DelegatingFilterProxy的代理對象。

3.FilterChainProxy

? 代理一組spring管理的filter bean來處理request。從spring security2.0以后,除非你需要對filter chain的內容進行嚴格的控制,否則你就無需顯式的在context中配置一個FilterChainProxy。默認的<security:http />命名空間配置選項可以處理絕大部分應用場景。示例如下:

<http auto-config="true"><remember-me key="xxx" token-validity-seconds="xxx" data-source-ref="dataSource"/><form-login login-page="/login.jsp"/><logout logout-success-url="/login.jsp"/><intercept-url pattern="/*" access="ROLE_USER"/></http>

?通過在你的應用中的web.xml中增加一個名為DelegatingFilterProxy標準的spring聲明,就可以將FilterChaiProxy鏈接到servlet 容器的filter chain。

? 3.1 配置

? 從spring security 3.1版本,FilterChainProxy通過一組SecurityFilterChain實例來配置,每個SecurityFilterChain實例包含一個RequestMacher和一組匹配request的Filter。

? 大部分應用只需要包含一個簡單的filter chain,若你使用命名空間,你無需顯式的設置chain;若你需要一個精確的 控制,你可以使用<filter-chain>命名空間元素。它定義了一個urI匹配模式和一組逗號分隔的、應用到request和url匹配的filter。實例如下:

<bean id="myfilterChainProxy" class="org.springframework.security.util.FilterChainProxy"><constructor-arg><util:list><security:filter-chain pattern="/do/not/filter*" filters="none"/><security:filter-chain pattern="/**" filters="filter1,filter2,filter3"/></util:list></constructor-arg></bean>

?

?3.2 request處理

  HttpFirewall實例用來驗證接收的request請求,并且創建一個新的包裝后的請求,這個新包裝的請求提供了和原請求一致的路徑值。

  FilterChainProxy使用firewall實例來獲取應用到filter chain的request請求和response響應對象。當request請求通過security filter chain,將調用reset方法,此時將會返回servletPath和pathInfo的原始值,而不是security 模式匹配后的修改值。

? 3.3 Filter生命周期

? ? 注意,servlet容器中的filter生命周期和Ioc容器中的filter生命周期不一致。因此建議你使用Ioc容器而不是servlet容器來管理你增加到應用上下文的filter 的生命周期。

? 3.4?SecurityFilterChain

? ? ? ?定義了一個filter chain,它能夠和HttpServletRequest進行匹配,匹配是為了決定是否需要應用到該request請求。

4. filters預覽

  那么spring security有哪些filter呢?

SecurityFilters.java定義了默認的filter及其順序:

FIRST (Integer.MIN_VALUE),CHANNEL_FILTER,SECURITY_CONTEXT_FILTER,CONCURRENT_SESSION_FILTER,/** {@link WebAsyncManagerIntegrationFilter} */WEB_ASYNC_MANAGER_FILTER,HEADERS_FILTER,CSRF_FILTER,LOGOUT_FILTER,X509_FILTER,PRE_AUTH_FILTER,CAS_FILTER,FORM_LOGIN_FILTER,OPENID_FILTER,LOGIN_PAGE_FILTER,DIGEST_AUTH_FILTER,BASIC_AUTH_FILTER,REQUEST_CACHE_FILTER,SERVLET_API_SUPPORT_FILTER,JAAS_API_SUPPORT_FILTER,REMEMBER_ME_FILTER,ANONYMOUS_FILTER,SESSION_MANAGEMENT_FILTER,EXCEPTION_TRANSLATION_FILTER,FILTER_SECURITY_INTERCEPTOR,SWITCH_USER_FILTER,LAST (Integer.MAX_VALUE);private static final int INTERVAL = 100;

測試:

public static void main(String[] args) {// TODO Auto-generated method stub System.out.println(SecurityFilters.CHANNEL_FILTER.getOrder());System.out.println(SecurityFilters.SECURITY_CONTEXT_FILTER.getOrder());System.out.println(SecurityFilters.CONCURRENT_SESSION_FILTER.getOrder());}

結果如下:

100
200
300

以此類推:

默認的過濾器順序列表
order 過濾器名稱
100 ChannelProcessingFilter
200 ConcurrentSessionFilter
300 SecurityContextPersistenceFilter
400 LogoutFilter
500 X509AuthenticationFilter
600 RequestHeaderAuthenticationFilter
700 CasAuthenticationFilter
800 UsernamePasswordAuthenticationFilter
900 OpenIDAuthenticationFilter
1000 DefaultLoginPageGeneratingFilter
1100 DigestAuthenticationFilter
1200 BasicAuthenticationFilter
1300 RequestCacheAwareFilter
1400 SecurityContextHolderAwareRequestFilter
1500 RememberMeAuthenticationFilter
1600 AnonymousAuthenticationFilter
1700 SessionManagementFilter
1800 ExceptionTranslationFilter
1900 FilterSecurityInterceptor
2000 SwitchUserFilter

5. filters架構層次

?

?6. 默認filter的創建

?

轉載于:https://www.cnblogs.com/davidwang456/p/4521955.html

總結

以上是生活随笔為你收集整理的spring security源码分析之一springSecurityFilterChain的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 蜜臀久久99静品久久久久久 | 毛片日韩| 国产 福利 在线 | 快乐激情网 | 欧美日韩中文国产一区发布 | 国产精品视频1区 | 中文字幕久久一区 | 国产一区二区在线观看视频 | 中文字幕高清视频 | 国产精品美女www爽爽爽 | 182tv午夜福利在线观看 | 善良的公与媳hd中文字 | 国产亚洲色婷婷久久 | 亚洲男人的天堂在线观看 | 久久免费看 | 日韩精品电影一区二区 | 国产h视频 | 黄色一级国产 | 一级片免费在线观看 | 欧美黑人狂野猛交老妇 | 2023毛片 | 少妇与公做了夜伦理 | 亚洲精品乱码久久久久久蜜桃不卡 | 福利姬在线观看 | 欧美少妇喷水 | 国产亚洲一区二区三区 | 无码精品人妻一区二区三区漫画 | 激情视频网 | 伊人久久大香线蕉综合75 | 日韩欧美一区二区三区视频 | 亚洲av无码一区二区三区人妖 | 最近中文字幕免费视频 | 51啪影院 | 香蕉911 | 亚洲欧美日韩一区二区 | 黄网站色 | 日本伦理一区二区三区 | 成人在线高清 | 在线不卡av电影 | 男女爱爱网站 | 激情视频网站在线观看 | 97久久精品 | 高潮白浆女日韩av免费看 | 韩国伦理在线视频 | 亚洲免费成人网 | 老头把女人躁得呻吟 | 亚洲 欧美 日韩 综合 | 精品欧美乱码久久久久久 | 男人的天堂在线播放 | 深爱激情久久 | 毛片aaaaaa| 日韩av首页 | 全部孕妇毛片丰满孕妇孕交 | 国产激情二区 | 国产精品视频一二区 | 性激情视频 | 伊人99| 丁香一区二区 | 碧蓝之海动漫在线观看免费高清 | 国产精品一级二级三级 | 久久这里只精品 | 久久精品国产成人av | 国产黑丝在线观看 | 波多野结衣精品视频 | 亚洲av成人精品一区二区三区 | se婷婷 | 亚洲日本欧美精品 | 日韩视频免费观看 | 久久久久久18 | 一区二区三区天堂 | 爽爽爽av| 国产一级二级在线观看 | 91春色| 国产精品久久久久久免费免熟 | 丰满熟女人妻一区二区三区 | 亚洲视频导航 | 97人人爱 | 成人h动漫精品一区二区器材 | a级片日本 | 婷婷丁香综合 | 亚洲精品免费在线播放 | 欧美专区在线播放 | 国产无码精品在线播放 | 国产免费内射又粗又爽密桃视频 | 一级不卡毛片 | 人妻熟妇又伦精品视频a | 成人一区二区电影 | 国产精品一二三四区 | 午夜aa | 精品国产一区二区三区日日嗨 | 久久久久亚洲av成人网人人软件 | 欧美三级视频在线观看 | jzzjzzjzz亚洲成熟少妇 | 国产a v一区二区三区 | 尤物av无码色av无码 | 中文字幕一区二区久久人妻 | 丁香久久婷婷 | 日本一本高清 | 日本伦理在线 |