在 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