SpringSecurity6 | 退出登录后的JSON处理

172 阅读2分钟

SpringSecurity6 | 退出登录后的JSON处理

image-20231030235443828

1.前言

大家好,我是Leo哥🫣🫣🫣,接到上一节,我们学习通过SpringSecurity登录失败之后的一些页面的跳转。这篇文章我们主要来介绍一下我们通过自定义登录界面之后的一些细节处理。好了,话不多说让我们开始吧😎😎😎。

2.概述

在之前我们学习了登录成功和登录失败的JSON处理,本篇我们主要来研究一下如何完成退出登录之后的JSON处理。

其实大体逻辑都大差不差。

3.JSON处理

3.1 自定义Handle

首先我们需要自定义AuthenticationSuccessHandle并实现他的一些方法。

package org.javatop.custom.config;

import cn.hutool.json.JSONUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;

import java.io.IOException;
import java.util.HashMap;

/**
 * @author : Leo
 * @version 1.0
 * @date 2023-12-26 22:09
 * @description : 自定义登出成功处理器
 */
public class MyLogoutSuccessHandler implements LogoutSuccessHandler {
    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        HashMap<String, Object> result = new HashMap<>();
        result.put("msg", "退出成功");
        result.put("code", 200);
         //  返回退出成功信息
        result.put("data", authentication);
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(JSONUtil.toJsonStr(result));
    }
}

这次我并没有直接向之前使用ObjectMapper进行响应JSON,而是通过hutool工具提供的JSONUtil进行JSON数据的转换。

3.2 进行配置

在我们的 MvcCconfig 中进行handler配置。

注意:使用JSON响应之后就必须注释掉页面的一些跳转配置。

.logoutSuccessHandler(new MyLogoutSuccessHandler())

然后重启项目,进行测试。

image-20231226221428887

这个就是我们刚响应的JSON数据。

4.页面按钮

我们每次都是通过在地址栏上退出登录的话还是有些麻烦的,所以我们打算准备一个前端页面。

需求:当我们登录成功之后跳转到主页面,主页面可以通过超链接点击进行退出登录。

4.1 准备一个主页面

准备一个主页,然后给一个超链接,请求到退出登录URL。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body>
<h2>欢迎来到主页面</h2>
<a href="/out">退出登录</a>
</body>
</html>

4.2 编写控制器

 @RequestMapping("/index.html")
    public String index(){
        return "index";
    }

4.3 启动测试

5.总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。