remember Me. 很多网站,比如博客园,在登录页面就有这个选项,勾选“下次自动登录”后,在一定时间段内,只要不清空浏览器Cookie,就可以自动登录
可参考文章:http://www.cnblogs.com/yjmyzz/p/remember-me-sample-in-spring-security3.html
1.建立一张用于存放登录信息的表(persistent_logins) 这个是默认的
--Remember Me持久化保存记录 create table PERSISTENT_LOGINS ( username VARCHAR2(64) not null, series VARCHAR2(64) not null, token VARCHAR2(64) not null, last_used DATE not null ); alter table PERSISTENT_LOGINS add constraint PK_PERSISTENT_LOGIN primary key (series);2.登录页面添加记录登录的checkbox
下面的name=“remember-me”与spring配置的 remember-me-parameter="remember-me"对应,默认是_spring_security_remember_me
<tr> <td align="right">一周内自动登录:</td> <td><input type="checkbox" name="remember-me" id="remember-me"></td> </tr>3.spring security配置文件添加数据库remember me配置,位于http标签中,
参数data-source-ref:是数据源、 token-validity-seconds:到期时间,默认2周、remember-me-parameter:与登录也复选框name属性对应
<remember-me data-source-ref="dataSource" token-validity-seconds="1209600" remember-me-parameter="remember-me" />4. 在用户登录的表单进行提交时,选中remeber-me的复选框,这样在登录时就会自动在数据库中插入一条记录数据
在jsp前端检查是否Remember Me自动登录很简单,直接使用security提供的tag标签即可,类似下面这样:
1 <%@taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> 2 ... 3 <sec:authorize access="isRememberMe()"> 4 ... 5 </sec:authorize>
在java 服务端的Controller中,可这样检测:
logout时,该记录以及客户端的cookie都会同时清空。
最后,如果不想用默认的表名persistent_logins,可研究下:
org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl
org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices
这二个类的源码 以及 相关文章:
http://forum.spring.io/forum/spring-projects/security/126343-spring-3-1-persistenttokenbasedremembermeservices-and-usernamepasswordauthentication
http://www.fengfly.com/document/springsecurity3/remember-me.html
http://docs.huihoo.com/spring/spring-security/3.0.x/remember-me.html#remember-me-persistent-token
未完待需。。。