启用remember-me功能,在配置文件中的http节点下添加:
1 <remember-me 2 remember-me-parameter="remember-me" 3 remember-me-cookie="remember-me" 4 token-validity-seconds="86400" 5 data-source-ref="dataSource"/>
这里可以设置表单中的checkbox对应name属性,cookie名称,已经失效时间。在数据库持久化cookie的,还要设置dataSource.
RememberMeAuthenticationFilter和UsernamePasswordAuthenticationFilter的作用和运行过程几乎一致,唯一大的区别就是这里是从数据库中取到cookie信息,并与客户端传到到服务端的cookie信息对照,如果匹配成功,直接生成有效的Authentication放到SecurityContextHolder中。
springSecurity默认的查询代码是:
/** The default SQL used by the <tt>getTokenBySeries</tt> query */ public static final String DEF_TOKEN_BY_SERIES_SQL = "select username,series,token,last_used from persistent_logins where series = ?";
也就是说启用rememberme功能需要在数据库中建立一个名为persistent_logins的表
下面是一个在mysql中的建表语句:
1 /* For Remember-Me token storage purpose */ 2 CREATE TABLE persistent_logins ( 3 username VARCHAR(64) NOT NULL, 4 series VARCHAR(64) NOT NULL, 5 token VARCHAR(64) NOT NULL, 6 last_used TIMESTAMP NOT NULL, 7 PRIMARY KEY (series) 8 )ENGINE=INNODB DEFAULT CHARSET=utf8;
当然也可以实现自己的查询逻辑,只需要实现一个继承AbstractRememberMeServices的类即可。持久化cookie默认使用的是PersistentTokenBasedRememberMeServices。