spring security 3 关于session 会话管理

spring security 3 的官方的文档不是很好找,一般都是spring security 2 (Acegi)的文档较多,但是 3 在 2 的基础上发生了很大变化,其中过滤器的命名使用上就有很大的差异。这是找到的3.0.1 的一个文档地址 http://www.fengfly.com/document/springsecurity3/springsecurity.html(2011.5可用),可以查看过滤器链相关内容,发现不同,下图为3.0+的一个过滤器命名空间表:

Table 2.1. 标准过滤器假名和顺序

    auto-config      假名过滤器类命名空间元素或属性
CHANNEL_FILTER ChannelProcessingFilter http/intercept-url@requires-channel
CONCURRENT_SESSION_FILTER ConcurrentSessionFilter session-management/concurrency-control
SECURITY_CONTEXT_FILTER SecurityContextPersistenceFilter http
Y LOGOUT_FILTER                                     LogoutFilter http/logout
X509_FILTER X509AuthenticationFilter http/x509
PRE_AUTH_FILTER AstractPreAuthenticatedProcessingFilter Subclasses N/A
CAS_FILTER CasAuthenticationFilter N/A
Y FORM_LOGIN_FILTER UsernamePasswordAuthenticationFilter http/form-login
Y BASIC_AUTH_FILTER BasicAuthenticationFilter http/http-basic
SERVLET_API_SUPPORT_FILTER SecurityContextHolderAwareFilter http/@servlet-api-provision
REMEMBER_ME_FILTER RememberMeAuthenticationFilter http/remember-me
ANONYMOUS_FILTER SessionManagementFilter http/anonymous
SESSION_MANAGEMENT_FILTER AnonymousAuthenticationFilter session-management
EXCEPTION_TRANSLATION_FILTER ExceptionTranslationFilter http
FILTER_SECURITY_INTERCEPTOR FilterSecurityInterceptor http
SWITCH_USER_FILTER SwitchUserAuthenticationFilter N/A
从上表可以看出,默认的auto-config=‘true’配置中必不包含session-management的过滤器,所以要进行会话管理,需要自己添加过滤器以及监听器。如果你自己扩展了userdetails(实现implements UserDetails)的话,在实现类里注意要重写以下两个方法,否则相同用户登录次数限制将不起作用(原因hashset等结构数据的比较通过hascode()方法)。
/**	 * 获取当前登录用户详细信息必须重写次方法	 */	
public int hashCode()	
{	
   return getUsername().hashCode();	
}
/**	 * 获取当前登录用户详细信息必须重写次方法	 */
public boolean equals(Object obj)	
{	
   if (obj instanceof UserDetails)	
 {	
   UserDetails ud = (UserDetails) obj;	
   if (ud.getUsername().equals(this.getUsername()))	
   { return true;}	
 }	
   return false;	
}
测试相同用户登录限制的时候,用不同浏览器分别访问。
posted @ 2011-05-12 15:02  spencer.IQ  阅读(1821)  评论(0编辑  收藏  举报