我正在使用spring boot创建一个无状态REST API。 因此,我使用基于令牌的身份验证。
目前,注销功能仅在客户端实现。 我只清除所有的饼干。
问题是用户对象似乎在请求中存活,因此它仍然存在于下一个请求中。 我获得当前用户的服务很简单:
@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;
}
}
我希望每个请求的用户变量都为null?有趣的是,在安全上下文中设置了正确的用户ID。但是服务返回用户对象,因为它已经存在。
答案 0 :(得分:1)
您不应将user用作类属性。
UserService是一个单例,当你有来自不同用户的并发请求时会发生什么? 在get方法中移动此变量。
此外,如果您使用JWT作为基于令牌的身份验证,请查看此project。
使用JWT,您可以直接从令牌中检索用户所需的信息,而无需执行任何查询。