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
未完待需。。。