作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 Spring Security 3.2.3.RELEASE 实现了基于持久 token 的记住我。
在开发和测试期间,我意识到数据库中充满了相同用户名的 token 。
当调用 removeUserTokens 时,我不知道我需要删除哪些 token 。我猜用户有多个 token ,他使用的每个设备(计算机、Android 等)都有一个 token ,如果他注销一个设备,我想删除该设备的 token ,以便他在另一个设备上保持登录状态设备。
有什么想法吗?
最佳答案
1) 使用另一种方法创建自定义 PersistentTokenRepository:
public class MDJdbcTokenRepository extends JdbcTokenRepositoryImpl {
public void removeTokenBySeries(String series) {
getJdbcTemplate().update("delete from persistent_logins where series = ?", series);
}
}
2) 创建自定义 RememeberMeServices
public class MDRememberMeServices extends PersistentTokenBasedRememberMeServices {
private MDJdbcTokenRepository tokenRepository;
public MDRememberMeServices(String key,
UserDetailsService userDetailsService,
MDJdbcTokenRepository tokenRepository) {
super(key, userDetailsService, tokenRepository);
setParameter("remember-me");// parameter name in login form
this.tokenRepository = tokenRepository;
}
public void logout(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) {
cancelCookie(request, response);
if (authentication != null) {
String rememberMeCookie = extractRememberMeCookie(request);
if(rememberMeCookie != null && rememberMeCookie.length() != 0) {
String[] cookieTokens = decodeCookie(rememberMeCookie);
if (cookieTokens.length == 2) {
String series = cookieTokens[0];
//remove by series
tokenRepository.removeTokenBySeries(series);
}
}
}
}
}
3)添加 bean
private static String key = "your string here";
@Bean
public MDJdbcTokenRepository persistentTokenRepository() {
MDJdbcTokenRepository db = new MDJdbcTokenRepository();
db.setDataSource(dataSource());
return db;
}
@Bean
public RememberMeServices rememberMeServices() throws Exception {
return new MDRememberMeServices(key, userDetailsService, persistentTokenRepository());
}
4) 更改您的安全 Spring 配置:
and().rememberMe().key(key).rememberMeServices(rememberMeServices())
关于java - 我如何决定在 Spring Security PersistentTokenRepository.removeUserTokens 中删除哪个持久 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24287758/
我已经使用 Spring Security 3.2.3.RELEASE 实现了基于持久 token 的记住我。 在开发和测试期间,我意识到数据库中充满了相同用户名的 token 。 当调用 remov
我是一名优秀的程序员,十分优秀!