xyz20003

www.mossle.com
随笔 - 34, 文章 - 0, 评论 - 124, 引用 - 0
数据加载中……

图解Spring Security默认使用的过滤器

第 9 章 图解过滤器

auto-config='true'时的过滤器列表

图 9.1. auto-config='true'时的过滤器列表


9.1. HttpSessionContextIntegrationFilter

org.springframework.security.context.HttpSessionContextIntegrationFilter

图 9.2. org.springframework.security.context.HttpSessionContextIntegrationFilter


位于过滤器顶端,第一个起作用的过滤器。

用 途一,在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContext了。如果存在,就把 SecurityContext拿出来,放到SecurityContextHolder中,供Spring Security的其他部分使用。如果不存在,就创建一个SecurityContext出来,还是放到SecurityContextHolder中, 供Spring Security的其他部分使用。

用途二,在所有过滤器执行完毕后,清空SecurityContextHolder,因为SecurityContextHolder是基于ThreadLocal的,如果在操作完成后清空ThreadLocal,会受到服务器的线程池机制的影响。

9.2. LogoutFilter

org.springframework.security.ui.logout.LogoutFilter

图 9.3. org.springframework.security.ui.logout.LogoutFilter


只处理注销请求,默认为/j_spring_security_logout。

用途是在用户发送注销请求时,销毁用户session,清空SecurityContextHolder,然后重定向到注销成功页面。可以与rememberMe之类的机制结合,在注销的同时清空用户cookie。

9.3. AuthenticationProcessingFilter

org.springframework.security.ui.webapp.AuthenticationProcessingFilter

图 9.4. org.springframework.security.ui.webapp.AuthenticationProcessingFilter


处理form登陆的过滤器,与form登陆有关的所有操作都是在此进行的。

默认情况下只处理/j_spring_security_check请求,这个请求应该是用户使用form登陆后的提交地址,form所需的其他参数可以参考:???

此过滤器执行的基本操作时,通过用户名和密码判断用户是否有效,如果登录成功就跳转到成功页面(可能是登陆之前访问的受保护页面,也可能是默认的成功页面),如果登录失败,就跳转到失败页面。

9.4. DefaultLoginPageGeneratingFilter

org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter

图 9.5. org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter


此过滤器用来生成一个默认的登录页面,默认的访问地址为/spring_security_login,这个默认的登录页面虽然支持用户输入用户名,密码,也支持rememberMe功能,但是因为太难看了,只能是在演示时做个样子,不可能直接用在实际项目中。

如果想自定义登陆页面,可以参考:第 4 章 自定义登陆页面

9.5. BasicProcessingFilter

org.springframework.security.ui.basicauth.BasicProcessingFilter

图 9.6. org.springframework.security.ui.basicauth.BasicProcessingFilter


此过滤器用于进行basic验证,功能与AuthenticationProcessingFilter类似,只是验证的方式不同。有关basic验证的详细情况,我们会在后面的章节中详细介绍。

有关basic验证的详细信息,可以参考:第 12 章 basic认证

9.6. SecurityContextHolderAwareRequestFilter

org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter

图 9.7. org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter


此过滤器用来包装客户的请求。目的是在原始请求的基础上,为后续程序提供一些额外的数据。比如getRemoteUser()时直接返回当前登陆的用户名之类的。

9.7. RememberMeProcessingFilter

org.springframework.security.ui.rememberme.RememberMeProcessingFilter

图 9.8. org.springframework.security.ui.rememberme.RememberMeProcessingFilter


此过滤器实现RememberMe功能,当用户cookie中存在rememberMe的标记,此过滤器会根据标记自动实现用户登陆,并创建SecurityContext,授予对应的权限。

有关rememberMe功能的详细信息,可以参考:第 14 章 自动登录

9.8. AnonymousProcessingFilter

org.springframework.security.providers.anonymous.AnonymousProcessingFilter

图 9.9. org.springframework.security.providers.anonymous.AnonymousProcessingFilter


为了保证操作统一性,当用户没有登陆时,默认为用户分配匿名用户的权限。

有关匿名登录功能的详细信息,可以参考:第 15 章 匿名登录

9.9. ExceptionTranslationFilter

org.springframework.security.ui.ExceptionTranslationFilter

图 9.10. org.springframework.security.ui.ExceptionTranslationFilter


此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,或返回对应的响应错误代码。

9.10. SessionFixationProtectionFilter

org.springframework.security.ui.SessionFixationProtectionFilter

图 9.11. org.springframework.security.ui.SessionFixationProtectionFilter


防御会话伪造攻击。有关防御会话伪造的详细信息,可以参考:第 16 章 防御会话伪造

9.11. FilterSecurityInterceptor

org.springframework.security.intercept.web.FilterSecurityInterceptor

图 9.12. org.springframework.security.intercept.web.FilterSecurityInterceptor


用户的权限控制都包含在这个过滤器中。

功能一:如果用户尚未登陆,则抛出AuthenticationCredentialsNotFoundException“尚未认证异常”。

功能二:如果用户已登录,但是没有访问当前资源的权限,则抛出AccessDeniedException“拒绝访问异常”。

功能三:如果用户已登录,也具有访问当前资源的权限,则放行。

至此,我们完全展示了默认情况下Spring Security中使用到的过滤器,以及每个过滤器的应用场景和显示功能,下面我们会对这些过滤器的配置和用法进行逐一介绍。

posted on 2009-06-15 10:39 临远 阅读(3577) 评论(6)  编辑  收藏

评论

# re: 图解Spring Security默认使用的过滤器  回复  更多评论   

说得很详细,支持一下.
2009-06-15 11:29 | 心梦帆影

# re: 图解Spring Security默认使用的过滤器  回复  更多评论   

session固化攻击指的是什么,楼主能否介绍下,是否关于Httpsession的伪造
2009-06-15 11:54 | good

# re: 图解Spring Security默认使用的过滤器  回复  更多评论   

我觉得spring security做为权限管理中间件,有些“顾左右,而言其他”的味道。

因为:用户登录、session判断,url判断,这是非常简单的事情,没有必要搞的这么罗嗦。
而对于细粒度权限,或者叫数据级权限,根本就是无能为力。需要开发者自行编写代码。哎。。。。

推荐一篇文章:《Spring Security优劣之我见》http://metadmin.javaeye.com/blog/364132

另外,细粒度权限管理软件,还有 www.metadmin.com
2009-06-15 12:11 | metadmin

# re: 图解Spring Security默认使用的过滤器  回复  更多评论   

@good
session fix和session伪造应该是一个东西,之后的章节里会详细介绍。

@metadmin
spring security第一目标是实现常用的web安全机制,倒也没看出把这些事情弄的多复杂,细粒度权限控制这边似乎做的没那么好,等讲到acl的时候再详细讨论一下吧。
2009-06-15 12:16 | 临远

# re: 图解Spring Security默认使用的过滤器  回复  更多评论   

spring security第一目标是实现常用的web安全机制,倒也没看出把这些事情弄的多复杂,细粒度权限控制这边似乎做的没那么好,等讲到acl的时候再详细讨论一下吧。
Java乐园 -Java学习者的天堂。 http://www.javaly.cn Java学习交流网站 Java乐园群号:15651281
2009-06-15 13:08 | 找个美女做老婆

# re: 图解Spring Security默认使用的过滤器  回复  更多评论   

@good
在spring 文档中有介绍,是请求传输过程中被拦截,获取session id 进行伪造session。
2009-06-15 22:04 | zhxing

只有注册用户登录后才能发表评论。


网站导航: