Spring Security Logout从无状态服务器

时间:2017-09-12 14:32:09

标签: java spring

我正在使用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。但是服务返回用户对象,因为它已经存在。

1 个答案:

答案 0 :(得分:1)

您不应将user用作类属性。

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

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

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