Spring Security 中的 RememberMe 对应的 cookie 名称是可配置的——相信一般情况下大家也不会使用那个默认的值吧。不过既然是可配置的,我们一般就尽量不在程序中直接写这个名称,想取得此名称对应的 cookie 值就得做一些扩展了。
java 代码如下,本质很简单,就是将 protected 方法改为 public(SS 有点多此一举)。
<pre> /** * 将 extractRememberMeCookie 方法由父类的 protected 改为 public,并在其它地方取得 RememberMe 的 * cookie 内容。 * * 例如用来判断请求中是否存在 RememberMe 信息。 * * @author wjx * */ public class CustomTokenBasedRememberMeServices extends TokenBasedRememberMeServices { /** * 可以通过构造函数传入 key 和 service * * @param key * @param userDetailsService */ public CustomTokenBasedRememberMeServices(String key, UserDetailsService userDetailsService) { super(key, userDetailsService); } @Override public String extractRememberMeCookie(HttpServletRequest request) { return super.extractRememberMeCookie(request); } @Override public String getCookieName() { return super.getCookieName(); } } </pre>
然后在 xml 中做如下配置即可:
<beans:bean id="rememberMeServices"
class="com.someok.module.admin.security.CustomTokenBasedRememberMeServices">
<beans:constructor-arg index="0"
value="XXXXXXXXX" />
<beans:constructor-arg index="1"
ref="userDetailsService" />
<beans:property name="cookieName" value="REMEMBER_ME" />
<!-- 30 days -->
<beans:property name="tokenValiditySeconds" value="2592000" />
</beans:bean>
在 service 中调用的时候:
@Autowired
CustomTokenBasedRememberMeServices rememberMeServices;
String value = rememberMeServices.extractRememberMeCookie(request);
Over!!!