gpt4 book ai didi

java - Spring Security 从无状态服务器注销

转载 作者:行者123 更新时间:2023-12-02 12:16:05 32 4
gpt4 key购买 nike

我正在使用 Spring Boot 创建一个无状态 REST API。因此我使用基于 token 的身份验证。

目前注销功能仅在客户端实现。我刚刚清除了所有 cookie。

问题是用户对象似乎在请求中幸存下来,因此它仍然存在于下一个请求中。我获取当前用户的服务很简单:

@Service
public class UserService {
private User user;

@Autowired
private UserRepository;

public User get() {
if (user != null) {
return user;
}
Integer id = (Integer) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
user = userRepository.findById(id);
return user;
}
}

我希望每个请求的用户变量都为空?有趣的是,在安全上下文中设置了正确的用户 ID。但服务返回用户对象,因为它已经存在。

最佳答案

您不应该使用 user 作为类属性。

UserService 是一个单例,当您有来自不同用户的并发请求时会发生什么?将此变量移动到 get 方法中。

此外,如果您使用 JWT 作为基于 token 的身份验证,请查看此 project .

使用 JWT,您可以直接从 token 检索用户所需的信息,而无需执行任何查询。

关于java - Spring Security 从无状态服务器注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46179161/

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