spring security3的filter链

在网上一直在看security3,就把自己看到的一些资源整理下吧。

---------------------------------------------------------------

http://dead-knight.iteye.com/category/220917

---------------------------------------------------------------

博主的博客,里面写了很多对security的分析,我也最简单地先选择一些自己想要的东东。

org.springframework.security.config.http.SecurityFilters

enum SecurityFilters {
    FIRST (Integer.MIN_VALUE),
    //order=100
    CHANNEL_FILTER,
    //order=200
    CONCURRENT_SESSION_FILTER,
    //依次递增……
    SECURITY_CONTEXT_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,
    REMEMBER_ME_FILTER,
    ANONYMOUS_FILTER,
    SESSION_MANAGEMENT_FILTER,
    EXCEPTION_TRANSLATION_FILTER,
    FILTER_SECURITY_INTERCEPTOR,
    SWITCH_USER_FILTER,
    LAST (Integer.MAX_VALUE);
    //这里设置100,主要给自定义过滤器提供after、before的预留位置
    //也就是说,在某个默认的过滤器前后只能自定义99个过滤器,虽然可能性几乎为0
    private static final int INTERVAL = 100;
    private final int order;
    //返回的order值=序号*间隔100
    private SecurityFilters() {
        order = ordinal() * INTERVAL;
    }</p><p>    private SecurityFilters(int order) {
        this.order = order;
    }
    //主要通过该方法返回Filter的位置
    public int getOrder() {
       return order;
    }
}

由此可见,该类维护了Spring Security中每个filter的顺序

通过以上的分析,可以总结如下

1.由SecurityFilters维持位置order
2.由OrderDecorator维持filter与order的对应关系
3.由OrderComparator负责比较OrderDecorator的先后顺序


(OrderDecorator类。这个类实现org.springframework.core.Ordered)

 

附上默认的过滤器顺序列表

order过滤器名称解析类
100ChannelProcessingFilterorg.springframework.security.web.access.channel.ChannelProcessingFilter只要intercept-url标签中包含requires-channel属性,则创建该过滤器
200ConcurrentSessionFilterorg.springframework.security.web.session.ConcurrentSessionFiltersession监控
300SecurityContextPersistenceFilterorg.springframework.security.web.context.SecurityContextPersistenceFilter持久化SecurityContext实例,主要是创建一个空的SecurityContext(如果session中没有SecurityContext实例),然后持久化到session中
400LogoutFilterorg.springframework.security.web.authentication.logout.LogoutFilter
500X509AuthenticationFilter 
600RequestHeaderAuthenticationFilter 
700CasAuthenticationFilter 
800UsernamePasswordAuthenticationFilterorg.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
900OpenIDAuthenticationFilter 
1000DefaultLoginPageGeneratingFilter 
1100DigestAuthenticationFilter 
1200BasicAuthenticationFilterorg.springframework.security.web.authentication.www.BasicAuthenticationFilter
1300RequestCacheAwareFilterorg.springframework.security.web.savedrequest.RequestCacheAwareFilter用户登录成功后,重新恢复因为登录被打断的请求,ExceptionTranslationFilter保存了请求saveRequest(req,resp),在这里得到恢复
1400SecurityContextHolderAwareRequestFilterorg.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter从类名称可以猜出这个过滤器主要是包装请求对象request的,目的主要是实现servlet api的一些接口方法isUserInRole、getRemoteUser
1500RememberMeAuthenticationFilterorg.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter
1600AnonymousAuthenticationFilterorg.springframework.security.web.authentication.AnonymousAuthenticationFilter在UsernamePasswordAuthenticationFilter、BasicAuthenticationFilter、RememberMeAuthenticationFilter这些过滤器后面的,所以如果这三个过滤器都没有认证成功,则为当前的SecurityContext中添加一个经过匿名认证的token
1700SessionManagementFilterorg.springframework.security.web.session.SessionManagementFilterSessionManagementFilter提供两大类功能:
1.session固化保护-通过session-fixation-protection配置
2.session并发控制-通过concurrency-control配置
1800ExceptionTranslationFilterorg.springframework.security.web.access.ExceptionTranslationFilter对后面分为是FilterSecurityInterceptor、SwitchUserFilter抛出的AccessDeniedException和AuthenticationException进行处理
1900FilterSecurityInterceptororg.springframework.security.web.access.intercept.FilterSecurityInterceptor 是比较核心的过滤器,主要负责授权的工作,所依赖的有决策管理器、认证管理器、安全元数据资源
2000SwitchUserFilter 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值