06 SpringSecurity-注销登录功能

444 阅读1分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。

文章配套代码:gitee.com/lookouttheb…

退出登录和登录很类似,我们也是修改配置,指定退出登录请求的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}">&#x1006;注销</a></div>

 四、运行

点击注销按钮,可以成功注销,然后跳转到了登录页面。

五、总结

选择使用a标签注销登录最简单,这个时候就不需要logoutSuccessHandler。