Spring Security 中取得 RememberMe 的 cookie 值

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章