zsxneil

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  启用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。

posted on 2017-03-26 16:43  zsxneil  阅读(953)  评论(0编辑  收藏  举报