我们在登录淘宝京东的时候,经常会发现有诸如记住密码,自动登录之类的选择框.这就是今天我们要说的Remember-me功能。这个功能允许一个再次访问的用户在不需要输入用户名密码的情况下就可以自动登录。
Remember-me的实现配置
登录页面增加remember-me选项
login.jsp
...
<tr>
<td>Password:</td>
<td><input type='password' name='password' /></td>
</tr>
<tr>
<td colspan='2'>
<input id="remember-me" name="remember-me" type="checkbox" checked="checked"/>自动登录
</td>
</tr>
<tr>
<td colspan='2'>
<input name="submit" type="submit" value="Login" />
</td>
</tr>
...
spring security.xml配置remember-me选项
...
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/*" access="hasRole('ROLE_USER')" />
<form-login login-page="/loginPage" login-processing-url="/login"
always-use-default-target="true" default-target-url="/welcome"
authentication-failure-url="/loginPage?error=error" />
<logout logout-url="/logout" logout-success-url="/loginPage" invalidate-session="true"/>
<remember-me key="authorition"/>
<csrf disabled="true" />
</http>
...
配置完这两步,利用spring security完成自动登录的功能就基本完成了。现在启动项目,输入用户名密码,选择自动登录,登录成功后可以看到有如下Cookie
然后关闭浏览器,重新进入项目,将不会再看到登录页了。
remember-me属性详解
remember-me属性是spring security命名空间中实现自动登录的专属配置项,它有如下属性
1. key:这个”key”属性用来辨别分辨不同项目的cookie
2. authentication-success-handler-ref 指向一个AuthenticationSuccessHandler
3. data-source-ref 指向一个DataSource数据源
4. remember-me-cookie:cookie存放的名称.默认为’remember-me’.
5. remember-me-parameter:触发自动登录的请求参数名称.默认为’remember-me’.
6. services-alias:声明一个内部定义的RememberMeServices的bean的别名,提供给程序的其他bean使用
7. services-ref:指向一个RememberMeServices,可以自定义实现自己的自动登录逻辑
8. token-repository-ref:指向一个PersistentTokenRepository bean,用来实现持久化令牌的自动登录
9. token-validity-seconds:cookie存在的时间周期,单位为秒
10. use-secure-cookie:是否设置”secure”标志,具体使用不详
11. user-service-ref:指向一个UserDetailsService的bean
代码地址https://github.com/SmallBadFish/spring_security_demo/archive/0.3.0-rememberme.zip