Spring Security 中取得 RememberMe 的 cookie 值
Spring Security 中取得 RememberMe 的 cookie 值
郁也风 发表于3年前
Spring Security 中取得 RememberMe 的 cookie 值
  • 发表于 3年前
  • 阅读 968
  • 收藏 4
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: RememberMe 的 cookie name 一般都是配置的,所以我们在程序中可以不直接通过这个 name 取得对应的 cookie 值。

Spring Security 中的 RememberMe 对应的 cookie 名称是可配置的——相信一般情况下大家也不会使用那个默认的值吧。不过既然是可配置的,我们一般就尽量不在程序中直接写这个名称,想取得此名称对应的 cookie 值就得做一些扩展了。

java 代码如下,本质很简单,就是将 protected 方法改为 public(SS 有点多此一举)。

/**
 * 将 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();
	}
}

然后在 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!!!

共有 人打赏支持
粉丝 13
博文 17
码字总数 9489
×
郁也风
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: