该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-15
最后修改:2009-10-22
第 9 章 图解过滤器位于过滤器顶端,第一个起作用的过滤器。 用 途一,在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContext了。如果存在,就把 SecurityContext拿出来,放到SecurityContextHolder中,供Spring Security的其他部分使用。如果不存在,就创建一个SecurityContext出来,还是放到SecurityContextHolder中, 供Spring Security的其他部分使用。 用途二,在所有过滤器执行完毕后,清空SecurityContextHolder,因为SecurityContextHolder是基于ThreadLocal的,如果在操作完成后清空ThreadLocal,会受到服务器的线程池机制的影响。 只处理注销请求,默认为/j_spring_security_logout。 用途是在用户发送注销请求时,销毁用户session,清空SecurityContextHolder,然后重定向到注销成功页面。可以与rememberMe之类的机制结合,在注销的同时清空用户cookie。 处理form登陆的过滤器,与form登陆有关的所有操作都是在此进行的。 默认情况下只处理/j_spring_security_check请求,这个请求应该是用户使用form登陆后的提交地址,form所需的其他参数可以参考:???。 此过滤器执行的基本操作时,通过用户名和密码判断用户是否有效,如果登录成功就跳转到成功页面(可能是登陆之前访问的受保护页面,也可能是默认的成功页面),如果登录失败,就跳转到失败页面。 此过滤器用来生成一个默认的登录页面,默认的访问地址为/spring_security_login,这个默认的登录页面虽然支持用户输入用户名,密码,也支持rememberMe功能,但是因为太难看了,只能是在演示时做个样子,不可能直接用在实际项目中。 如果想自定义登陆页面,可以参考:第 4 章 自定义登陆页面。 此过滤器用于进行basic验证,功能与AuthenticationProcessingFilter类似,只是验证的方式不同。有关basic验证的详细情况,我们会在后面的章节中详细介绍。 有关basic验证的详细信息,可以参考:第 12 章 basic认证。 此过滤器用来包装客户的请求。目的是在原始请求的基础上,为后续程序提供一些额外的数据。比如getRemoteUser()时直接返回当前登陆的用户名之类的。 此过滤器实现RememberMe功能,当用户cookie中存在rememberMe的标记,此过滤器会根据标记自动实现用户登陆,并创建SecurityContext,授予对应的权限。 有关rememberMe功能的详细信息,可以参考:第 14 章 自动登录。 此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,或返回对应的响应错误代码。 防御会话伪造攻击。有关防御会话伪造的详细信息,可以参考:第 16 章 防御会话伪造。 用户的权限控制都包含在这个过滤器中。 功能一:如果用户尚未登陆,则抛出AuthenticationCredentialsNotFoundException“尚未认证异常”。 功能二:如果用户已登录,但是没有访问当前资源的权限,则抛出AccessDeniedException“拒绝访问异常”。 功能三:如果用户已登录,也具有访问当前资源的权限,则放行。 至此,我们完全展示了默认情况下Spring Security中使用到的过滤器,以及每个过滤器的应用场景和显示功能,下面我们会对这些过滤器的配置和用法进行逐一介绍。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-15
图片好像有点问题。。lz 修正下哦
|
|
返回顶楼 | |
发表时间:2009-06-16
nice,写的很好。很易懂
|
|
返回顶楼 | |
发表时间:2009-07-02
请问LZ“默认使用的过滤器列表”能在源代码或者哪个配置文件里找到吗?
|
|
返回顶楼 | |
发表时间:2009-07-02
最后修改:2009-07-02
信息: FilterChainProxy: FilterChainProxy[ UrlMatcher = org.springframework.security.util.AntUrlPathMatcher[requiresLowerCase='true']; Filter Chains: { /**=[ org.springframework.security.context.HttpSessionContextIntegrationFilter[ order=200;], org.springframework.security.ui.logout.LogoutFilter[ order=300; ], org.springframework.security.ui.webapp.AuthenticationProcessingFilter[ order=700; ], org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter[ order=900; ], org.springframework.security.ui.basicauth.BasicProcessingFilter[ order=1000; ], org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter[ order=1100; ], org.springframework.security.ui.rememberme.RememberMeProcessingFilter[ order=1200; ], org.springframework.security.providers.anonymous.AnonymousProcessingFilter[ order=1300; ], org.springframework.security.ui.ExceptionTranslationFilter[ order=1400; ], org.springframework.security.ui.SessionFixationProtectionFilter[ order=1600; ], org.springframework.security.intercept.web.FilterSecurityInterceptor@e2fbeb ] } ] Spring Security一启动就会包含这样一批负责各种安全管理的过滤器,可以在系统启动的日志里看到这样的信息。 与之相关的源代码在config包下。 |
|
返回顶楼 | |
发表时间:2009-07-02
对这个配置文件如何加载以及加载的顺序不了解,是这个意思。特别是基于命名空间的配置是如何实现的,如何对默认配置或者自定义配置进行加载。
|
|
返回顶楼 | |
发表时间:2009-07-02
filterChainProxy这个bean的配置现在跑哪去了呢,我知道是基于命名空间的功能把这个bean配置给省略了,但是只是了解不清楚具体的实现。
|
|
返回顶楼 | |
发表时间:2009-07-02
Spring Security-2.0中的命名空间配置,起源于:org.springframework.security.config.SecurityNamespaceHandler。
这个类中读取xml,向ctx注册对应的bean和filter和service和provider。。等等,有关命名空间配置的所有类都在org.springframework.security.config包下。 |
|
返回顶楼 | |
发表时间:2009-09-03
图片看不了呀,lz修正一下
|
|
返回顶楼 | |
发表时间:2010-05-24
分享也是要方法,用心滴的榜样!学习收藏感谢!
|
|
返回顶楼 | |
浏览 11956 次