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=‘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;
}
测试相同用户登录限制的时候,用不同浏览器分别访问。