SpringSecurity处理器:登录成功处理器、登录失败处理器、无权限处理器、注销成功处理器

news/2025/2/26 0:54:49

在 Spring Security 中,你可以通过实现特定的接口或扩展某些类来自定义各种处理器,例如登录成功处理器、登录失败处理器、无权限处理器和登出成功处理器。

以下是每种处理器的具体实现方法:

【示例】首先创建统一的响应结果类和响应结果编码枚举,方便后续示例中使用。

(1)创建 ApiResponseResult 响应结果类:

java">package com.pjb.ApiModel;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 响应结果类
 * @author pan_junbiao
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ApiResponseResult<T>
{
    private int code;
    private String message;
    private T data;

    public ApiResponseResult(ApiResponseCode apiResponseCode)
    {
        this.code = apiResponseCode.getCode();
        this.message = apiResponseCode.getMessage();
    }

    public ApiResponseResult(ApiResponseCode apiResponseCode, T data)
    {
        this.code = apiResponseCode.getCode();
        this.message = apiResponseCode.getMessage();
        this.data = data;
    }
}

(2)创建 ApiResponseCode 响应结果编码枚举: 

java">package com.pjb.ApiModel;

/**
 * 响应结果编码枚举
 * @author pan_junbiao
 **/
public enum ApiResponseCode
{
    LOGIN_SUCCESS(20000, "登录成功"),
    LOGIN_FAILURE(30000, "登录失败"),
    AUTHORIZATION_FAILURE(40300, "403无权限"),
    LOGOUT_SUCCESS(50000, "注销成功");

    private final int code;
    private final String message;

    ApiResponseCode(int code, String message)
    {
        this.code = code;
        this.message = message;
    }

    public int getCode()
    {
        return code;
    }

    public String getMessage()
    {
        return message;
    }
}

1、登录成功处理器

登录成功处理器,需要实现 AuthenticationSuccessHandler 接口,当登录认证成功后会执行调用。

1.1 登录成功后重定向到首页

java">package com.pjb.handler;

import com.pjb.ApiModel.ApiResponseCode;
import com.pjb.ApiModel.ApiResponseResult;
import com.pjb.util.JacksonUtil;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 登录成功处理类
 */
@Component
public class LoginSuccessHandler implements AuthenticationSuccessHandler
{
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException
    {
        //登录成功,重定向到首页
        response.sendRedirect("/");
    }
}

1.2 登录成功后返回统一响应

java">package com.pjb.handler;

import com.pjb.ApiModel.ApiResponseCode;
import com.pjb.ApiModel.ApiResponseResult;
import com.pjb.util.JacksonUtil;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.ste

http://www.niftyadmin.cn/n/5867004.html

相关文章

2025-skywalking组件

历史版本下载地址&#xff1a;Apache Archive Distribution Directory 官网&#xff1a;Apache SkyWalking 目录 . webapp: UI前端(web 监控页面)的jar包和配置文件; . oap-libs:后台应用的jar包&#xff0c;以及它的依赖jar包&#xff0c;里边有一个server-starter-*.jar就是…

API返回的数据结构包含哪些字段?

淘宝商品详情API返回的数据结构较为复杂&#xff0c;具体字段会根据API的版本和请求参数有所不同。以下是基于最新搜索结果的API返回值字段说明&#xff1a; 基础字段 num_iid&#xff1a;商品的唯一标识ID。 title&#xff1a;商品标题&#xff0c;用于描述商品名称或特点。…

C++:pthread线程分离和线程属性

在 C 的多线程编程中&#xff0c;pthread 库提供了强大的功能来管理线程。其中&#xff0c;线程分离和线程属性是两个重要的概念&#xff0c;它们对于优化线程的行为和资源管理有着关键作用。 线程分离 1.1 什么是线程分离 在 pthread 库中&#xff0c;线程有两种状态&#…

从零开始的网站搭建(以照片/文本/视频信息通信网站为例)

本文面向已经有一些编程基础&#xff08;会至少一门编程语言&#xff0c;比如python&#xff09;&#xff0c;但是没有搭建过web应用的人群&#xff0c;会写得尽量细致。重点介绍流程和部署云端的步骤&#xff0c;具体javascript代码怎么写之类的&#xff0c;这里不会涉及。 搭…

【Qt之QQuickWidget】QML嵌入QWidget中

由于我项目开始使用Widgets,换公司后直接使用QML开发&#xff0c;没有了解过如何实现widget到qml过渡&#xff0c;恰逢面试时遇到一家公司希望从widget迁移到qml开发&#xff0c;询问相关实现&#xff0c;一时语塞&#xff0c;很尴尬&#xff0c;粗略研究并总结下。 对qwidget嵌…

Html 5简介(学习笔记)

基本标签 1. 换行标签 <br> <br>2. 链接标签 <a> <a href"https://www.example.com" target"_blank">网站</a>href&#xff1a;指定链接地址。 target&#xff1a; _blank&#xff1a;在新标签页打开。_self&#xff08…

取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票

在做航班智能客服问答系统时会遇到取消票证的场景&#xff0c;这里涉及数据库的操作时会把指定的票证从数据库中删除&#xff0c;同时也会把票证和航班等相关表中的关联关系一起删除。但在删除之前&#xff0c;需要先检查当前用户是否拥有这张票&#xff0c;只有票主才有权限取…

FastAPI系列:Ubuntu部署FastAPI项目实战

这篇文章提供了在Ubuntu上部署FastAPI应用程序的详细指南。首先&#xff0c;读者将学习如何创建项目目录并设置Python虚拟环境&#xff0c;接着安装FastAPI、Uvicorn和Gunicorn等必要依赖。随后&#xff0c;文章指导用户编写基本的FastAPI应用程序代码&#xff0c;并使用Gunico…