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