基于spring-security 401 403錯(cuò)誤自定義處理方案
spring-security 401 403錯(cuò)誤自定義處理
為了返回給前端統(tǒng)一的數(shù)據(jù)格式,
一般所有的數(shù)據(jù)都會(huì)以類似下面的方式返回:
public class APIResultDto<T> {
/**
* 狀態(tài)碼:-1代表成功,具體參考APIErrorCode類
*/
private int er;
/**
* 狀態(tài)描述,可以自行設(shè)置或使用APIErrorCode類中默認(rèn)描述
*/
private String erMessage;
/**
* 實(shí)際返回實(shí)體,isSuccess()返回true時(shí)該字段有效
*/
private T items;
}
但是一些框架,比如本文要說(shuō)的spring-security是不按照我們自定義規(guī)范處理的,幸運(yùn)的是spring-security框架給了我們可以定制化的地方,只需繼承
ResourceServerConfigurerAdapter
重寫
public void configure(ResourceServerSecurityConfigurer resources) throws Exception
方法即可,在里面添加自定義的針對(duì)授權(quán)時(shí)返回的401以及403錯(cuò)誤碼,
具體如下:
@Autowired
private AccessDeniedHandler accessDeniedHandler;
@Autowired
private AuthenticationEntryPoint authenticationEntryPoint;
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.authenticationEntryPoint(authenticationEntryPoint);
resources.accessDeniedHandler(accessDeniedHandler);
}
里面涉及到的AccessDeniedHandler以及AuthenticationEntryPoint
如下所示:
@Component
public class CustomizedAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
response.setContentType("application/json;charset=UTF-8");
//按照系統(tǒng)自定義結(jié)構(gòu)返回授權(quán)失敗
response.getWriter().write(JSON.toJSONString(APIResultDto.failed(APIErrorCode.AUTH_FAILED)));
}
}
@Component
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
response.setContentType("application/json;charset=UTF-8");
//按照系統(tǒng)自定義結(jié)構(gòu)返回授權(quán)失敗
response.getWriter().write(JSON.toJSONString(APIResultDto.failed(APIErrorCode.AUTH_FAILED)));
}
}
關(guān)于狀態(tài)碼401與403區(qū)別
401 表示用戶沒(méi)有權(quán)限(令牌,用戶名,密碼錯(cuò)誤)
403 表示用戶有權(quán)限,只是訪問(wèn)是被禁止的(可以理解為,用戶有權(quán)限,但是某些目錄禁止訪問(wèn))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用JavaCV處理rtsp流的示例代碼
這篇文章主要為大家詳細(xì)介紹了SpringBoot使用JavaCV處理rtsp流,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2024-02-02
Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切
這篇文章主要給大家介紹了關(guān)于Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Idea servlet映射方法優(yōu)缺點(diǎn)對(duì)比
這篇文章主要介紹了Idea servlet映射方法優(yōu)缺點(diǎn)對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

