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!!!