基于spring-security 401 403錯(cuò)誤自定義處理方案
spring-security 401 403錯(cuò)誤自定義處理
為了返回給前端統(tǒng)一的數(shù)據(jù)格式,
一般所有的數(shù)據(jù)都會(huì)以類(lèi)似下面的方式返回:
public class APIResultDto<T> {
/**
* 狀態(tài)碼:-1代表成功,具體參考APIErrorCode類(lèi)
*/
private int er;
/**
* 狀態(tài)描述,可以自行設(shè)置或使用APIErrorCode類(lèi)中默認(rèn)描述
*/
private String erMessage;
/**
* 實(shí)際返回實(shí)體,isSuccess()返回true時(shí)該字段有效
*/
private T items;
}
但是一些框架,比如本文要說(shuō)的spring-security是不按照我們自定義規(guī)范處理的,幸運(yùn)的是spring-security框架給了我們可以定制化的地方,只需繼承
ResourceServerConfigurerAdapter
重寫(xiě)
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 表示用戶(hù)沒(méi)有權(quán)限(令牌,用戶(hù)名,密碼錯(cuò)誤)
403 表示用戶(hù)有權(quán)限,只是訪(fǎng)問(wèn)是被禁止的(可以理解為,用戶(hù)有權(quán)限,但是某些目錄禁止訪(fǎng)問(wèn))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決spring-boot2.0.6中webflux無(wú)法獲得請(qǐng)求IP的問(wèn)題
這幾天在用 spring-boot 2 的 webflux 重構(gòu)一個(gè)工程,寫(xiě)到了一個(gè)需要獲得客戶(hù)端請(qǐng)求 IP 的地方,在寫(xiě)的過(guò)程中遇到很多問(wèn)題,下面小編通過(guò)一段代碼給大家介紹解決spring-boot2.0.6中webflux無(wú)法獲得請(qǐng)求IP的問(wèn)題,感興趣的朋友跟隨小編一起看看吧2018-10-10
application.yml文件中如何開(kāi)啟mybatis自動(dòng)駝峰映射
這篇文章主要介紹了application.yml文件中開(kāi)啟mybatis自動(dòng)駝峰映射的方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
SpringCloud使用Kafka Streams實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理
使用Kafka Streams在Spring Cloud中實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理可以幫助我們構(gòu)建可擴(kuò)展、高性能的實(shí)時(shí)數(shù)據(jù)處理應(yīng)用,Kafka Streams是一個(gè)基于Kafka的流處理庫(kù),本文介紹了如何在SpringCloud中使用Kafka Streams實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理,需要的朋友可以參考下2024-07-07
IntelliJ IDEA打開(kāi)多個(gè)Maven的module且相互調(diào)用代碼的方法
這篇文章主要介紹了IntelliJ IDEA打開(kāi)多個(gè)Maven的module且相互調(diào)用代碼的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Mybatis配置之<environments>配置元素詳解
這篇文章主要介紹了Mybatis配置之<environments>配置元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Spring AOP 切面@Around注解的用法說(shuō)明
這篇文章主要介紹了Spring AOP 切面@Around注解的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Spring Boot集成教程之異步調(diào)用Async
在項(xiàng)目中,當(dāng)訪(fǎng)問(wèn)其他人的接口較慢或者做耗時(shí)任務(wù)時(shí),不想程序一直卡在耗時(shí)任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線(xiàn)程來(lái)并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async。需要的朋友們下面來(lái)一起看看吧。2018-03-03

