gpt4 book ai didi

java - 我如何决定在 Spring Security PersistentTokenRepository.removeUserTokens 中删除哪个持久 token

转载 作者:行者123 更新时间:2023-11-30 08:22:31 24 4
gpt4 key购买 nike

我已经使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com