spring security+oauth2退出登录(二)-token过期后退出登录

spring security+oauth2退出登录(二)-token过期后退出登录_第1张图片

代码详细

expireLogout

/logout/expirePage接口使用thymeleaf跳转到expire-logout.html页面

@Controller
public class LogoutController {

    /**
     * 过期退出登录
     * 
     * @param clientId
     * @param accessToken
     * @return
     */
    @GetMapping("/logout/expirePage")
    public ModelAndView expireLogout(String clientId, String accessToken) {
        Map data = new HashMap();
        data.put("clientId", clientId);
        return new ModelAndView("/expire-logout", data);
    }
}

expire-logout.html

expire-logout.html不进行显示 只为了跳转到后台域 清除session 执行两个逻辑 1:调用/logoutSession 清除session

                                                                                                                            2:获取授权码 重新跳转到登录页面




    
    
    
    vue模板
    
    
    
    
    
    


logoutSession

在token过期时 虽然不能访问后台接口 但是因为登录状态是cookie与session判断 且没有失效 如果不清空session 在获取授权码时就不会跳转到login页面 所以 我们需要清空session 使获取授权码时跳转

同时因为前后端分离项目 各自的域都不同 自由跳转到后台域上才能清空session 这就是expire-logout.html存在的意思

@RestController
@RequestMapping("/oauth")
public class OauthController {

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    @Lazy
    private TokenStore tokenStore;

    @Autowired
    private TokenEndpoint tokenEndpoint;

    @Autowired
    private SessionRegistry sessionRegistry;

    @Autowired
    Utils utils;


    /**
     * token过期清除session 保证跳页
     * 
     * @return
     * @throws IOException
     */
    @GetMapping("/logoutSession")
    public void logoutSession() throws IOException {
        RequestAttributes requsetAttributes = RequestContextHolder.currentRequestAttributes();
        HttpServletResponse response = ((ServletRequestAttributes)requsetAttributes).getResponse();
        HttpServletRequest request = ((ServletRequestAttributes)requsetAttributes).getRequest();
        // 清除cookie
        Cookie cookie = new Cookie("JSESSIONID", null);
        cookie.setMaxAge(0);
        cookie.setPath("/authentication");
        response.addCookie(cookie);
        response.setStatus(HttpStatus.OK.value());
        response.setHeader("Content-Type", "application/json;charset=UTF-8");
        Result result = new Result(200, "退出登录成功");
        response.getWriter().write(new ObjectMapper().writeValueAsString(result));
    }

}

 

你可能感兴趣的:(oauth2+spring,security)