文章配套代码:https://gitee.com/lookoutthebush/spring-security-demo
退出登录和登录很类似,我们也是修改配置,指定退出登录请求的URL,用户通过访问该路由可以安全地注销其登录状态,包括使 HttpSession失效、清空已配置的Remember-me验证,以及清空SecurityContextHolder,并在注销成功之 后重定向到/login?logout页面。 如有必要,还可以重新配置。
一、修改配置类
logoutUrl:退出登录功能前端请求的URL。(SpringSecurity实现服务端逻辑)
logoutSuccessUrl: 退出登录后要跳转的URL(ajax请求不需要指定)
logoutSuccessHandler:如果是ajax请求,则通过这个来返回数据结果
deleteCookies:需要删除的cookies, 可以传多个
invalidateHttpSession: 让session失效
二、LogoutSuccessHandler
@Component
@Slf4j
public class LogoutSuccessHandler implements
org.springframework.security.web.authentication.logout.LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
log.info("logout success, user: {}", authentication.getDetails());
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(JSON.toJSONString(ResultVO.success("success")));
}
}
三、前端代码
如果使用<a>标签,则配置类中的logoutSuccessHandler去除,如果使用ajax则不需要logoutSuccessUrl。
这里我们使用a标签:
<a style="padding-left: 18px;" class="layui-icon" th:href="@{/logout}">ဆ注销</a></div>
四、运行
点击注销按钮,可以成功注销,然后跳转到了登录页面。
五、总结
选择使用a标签注销登录最简单,这个时候就不需要logoutSuccessHandler。