SpringSecurity Filter处理流程

首先,看一下调试的配置

FilterChainProxy的处理过程
这是一个典型的责任链模式,推荐看一下这个博客

SecurityContextPersistenceFilter

功能:负责从SecurityContextRepository获取或存储SecurityContext。SecurityContext代表了用户安全和认证过的session。



HttpRequestResponseHolder其实就是当前请求中的request、response的一个包装,

而repo就是一个HttpSessionSecurityContextRepostory就是包含当前用户线程中的SecurityContext(Session)的一个类,并从中取出SecurityContext



再进去看一下HttpSessionSecurityContextRepository的loadContext做了什么事呢





由于之前还没有登录,所以访问,所以进去之后获取的SecurityContext中的authentication为null


LogOutFilter
功能:监控一个实际为退出功能的URL(默认为/j_spring_security_logout),并且在匹配的时候完成用户的退出功能。




UserNamePasswrodAuthenticationFilter
功能:监控一个使用用户名和密码基于form认证的URL(默认为/j_spring_security_check),并在URL匹配的情况下尝试认证该用户。


这是他的继承关系





上面由于requiresAuthentication()不需要验证,也就是不是以/j_spring_security_check结尾的请求行,所以,没有进行下面的验证
验证就下次吧,这可是SpringSecurity的重点


DefaultLoginPageGeneratingFilter
功能:监控一个要进行基于forn或OpenID认证的URL(默认为/spring_security_login),并生成展现登录form的HTML



BasicAuthenticationFilter
功能:监控HTTP 基础认证的头信息并进行处理



由于没有配置Basic去验证,看一下这篇博客http://sishuok.com/forum/blogPost/list/4305.html,写的还不错


RequestCacheAwareFilter
功能:用于用户登录成功后,重新恢复因为登录被打断的请求。



那requestCache.getMatchingRequest()里面又发生什么事呢
可见,在请求需要登录权限的时候,SpringSecurity会把当前的request缓存起来,以便在登录成功之后重新响应那个request



SecurityContextHolderAwareRequestFilter
功能:主要对当前request进行一个封装成一个SecurityContextHolderAwareRequestWrapper



AnonymousAuthenticationFilter
功能:如果用户到这一步还没有经过认证,将会为这个请求关联一个认证的token,标识此用户是匿名的。


所以,没被验证的用户就有了一个ROLE_ANONYMOUS的权限了

这里,还有一个问题,那key是怎么得来的?                                                



SessionManagerFilter
功能:根据认证的安全实体信息跟踪session,保证所有关联一个安全实体的session都能被跟踪到。

这个过滤器,推荐读一下这两篇博客
http://sishuok.com/forum/blogPost/list/4307.html
http://sishuok.com/forum/blogPost/list/4308.html


ExceptionTranslationFilter
功能:解决在处理一个请求时产生的指定异常



FilterSecurityInterceptor
功能:简化授权和访问控制决定,委托一个AccessDecisionManager完成授权的判断

这个filter是filterchain中比较复杂,也是比较核心的过滤器,主要负责授权的工作,这个filter就下次吧



总结:
1、SpringSecurity在过滤链上很重要的设计模式就是过滤链模式,过滤链模式不是一直进行下去的,他是通过filter所过滤的url进行匹配,匹配上了就进行相应的处理,并原路返回
2、SpringSecurity中通过将验证过的securityContext存储在securityContextrepositoty,其中包括登录信息,还有Session等信息,如果登录成功过的,他会同时将session加进去,在下一次访问时可以用session进行匹配登录









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值