Spring security JWT用户在注销时使令牌无效

Spring security JWT用户在注销时使令牌无效,spring-security,jwt,Spring Security,Jwt,我正在使用带有spring安全性的jwt令牌 在登录时成功生成令牌并将其传递到localStorage对象中的我的Reactjs应用程序之后。我有一个问题,在注销时我删除令牌,但仍然使用相同的令牌,我可以通过Postman访问安全api 因为我知道令牌未过期,但如果用户继续交互,我将过期时间保持在非常小的范围内(如5分钟),我是否有办法重新发布新令牌。有两种解决方案: 1:在每个api响应后重新发出新令牌,并使用筛选器更新react app的localstorage对象中的令牌 2:将所有已发布

我正在使用带有spring安全性的jwt令牌

在登录时成功生成令牌并将其传递到localStorage对象中的我的Reactjs应用程序之后。我有一个问题,在注销时删除令牌,但仍然使用相同的令牌,我可以通过Postman访问安全api


因为我知道令牌未过期,但如果用户继续交互,我将过期时间保持在非常小的范围内(如5分钟),我是否有办法重新发布新令牌。

有两种解决方案:

1:在每个api响应后重新发出新令牌,并使用筛选器更新react app的localstorage对象中的令牌


2:将所有已发布的令牌保存在存储库/缓存或内存中,然后在注销时从此存储库中删除令牌。在验证JWT令牌时,再添加一次检查,以查看该令牌是否存在于存储库中。

由于任何知道请求url和参数的人都可以访问正在运行的服务,因此是否有任何方法可以保护它们?如何删除存储库缓存删除仅在客户端工作。如果我发布了一个令牌,并使用相同的令牌在从postman注销后点击安全api,该怎么办。在客户端删除令牌之前,它不应该允许在注销(在后端执行某些操作)后访问安全api。简单。创建API以在成功删除时从后端删除此令牌从客户端/localstorage中删除该令牌。实现您自己的logouthandler一旦我这样做
return Jwts.builder().setSubject(Long.toString(userPrincipal.getId()).setIssuedAt(new Date()).setexpireidate(expireydate).signWith(SignatureAlgorithm.HS512,jwtSecret).compact()我无法更改我的安全性拥有的令牌。如果您已正确阅读,我们将无法更新或删除令牌。如果您有任何引用,请提供
公共类CustomLogoutHandler实现LogoutHandler{@Override public void logout(HttpServletRequest请求、HttpServletResponse响应、身份验证){String authHeader=request.getHeader(“授权”);String-token=authHeader.replace(“Bearer”,”);尝试{JWT-JWT=JWTParser.parse(token);String-subject=JWT.getJWTClaimsSet().getSubject();tokenRepo.deleteTokenBySubject(subject);}catch(ParseException e){}}
regsiter安全配置中的类似注销处理程序