当我想注销时,调用以下代码:

request.getSession().invalidate();
SecurityContextHolder.getContext().setAuthentication(null);

但是之后(在使用旧的oauth token 的下一个请求中)我调用
SecurityContextHolder.getContext().getAuthentication();
我在那里看到我的老用户。

如何解决?

最佳答案

这是我的实现(Spring OAuth2):

@Controller
public class OAuthController {
    @Autowired
    private TokenStore tokenStore;

    @RequestMapping(value = "/oauth/revoke-token", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public void logout(HttpServletRequest request) {
        String authHeader = request.getHeader("Authorization");
        if (authHeader != null) {
            String tokenValue = authHeader.replace("Bearer", "").trim();
            OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
            tokenStore.removeAccessToken(accessToken);
        }
    }
}

供测试用:
curl -X GET -H "Authorization: Bearer $TOKEN" http://localhost:8080/backend/oauth/revoke-token

关于java - Spring 安全。如何注销用户(撤消oauth2 token ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21987589/

10-09 19:59