基于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)文章
SpringBoot使用JavaCV處理rtsp流的示例代碼
這篇文章主要為大家詳細(xì)介紹了SpringBoot使用JavaCV處理rtsp流,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2024-02-02Java使用正則表達(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-09Springmvc 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-10Idea servlet映射方法優(yōu)缺點(diǎn)對(duì)比
這篇文章主要介紹了Idea servlet映射方法優(yōu)缺點(diǎn)對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11