SpringBoot?攔截器返回false顯示跨域問題
?項(xiàng)目最近添加了一個(gè)ip黑白名單的功能, 發(fā)現(xiàn)如果ip過濾的攔截器返回 false 后前端會(huì)顯示跨域, 嘗試修改MVC配置類后發(fā)現(xiàn)還是不行, 最后在攔截器加了個(gè)判斷就可以了 ↓↓↓
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { // ----------- 加上這個(gè)就好了 ----------- if (!(handler instanceof HandlerMethod)) { return true; } }
WebMvcConfigurer 配置類
@Configuration @RestControllerAdvice public class WebMvcConfig implements WebMvcConfigurer { @Resource private IpFilterInterceptor ipFilterInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // IP攔截器 registry.addInterceptor(ipFilterInterceptor) .addPathPatterns("/**") .order(5); } @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowCredentials(true) .allowedOriginPatterns("*") .allowedMethods("*") .allowedHeaders("*") .maxAge(3600); } }
修改前的 IP攔截器
@Component public class IpFilterInterceptor implements HandlerInterceptor { /** * 是否啟用 */ private boolean enable; /** * 是否為白名單 */ private boolean isWhiteList; /** * 過濾器 */ private List<String> filters; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { // 停用 if (!enable) { return true; } String ip = Servlets.getRemoteAddr(request); // 本機(jī)不過濾 if (Const.LOCALHOST_IP_V4.equals(ip)) { return true; } // 過濾 boolean contains = false; for (String filter : filters) { if (Strings.isBlank(filter)) { continue; } // 檢測 contains = Utils.checkIpIn(ip, filter); if (contains) { break; } } // 結(jié)果 boolean pass; if (isWhiteList) { pass = contains; } else { pass = !contains; } // 返回 if (!pass) { response.setContentType(StandardContentType.APPLICATION_JSON); Servlets.transfer(response, HttpWrapper.of(ResultCode.IP_BAN).toJsonString().getBytes()); } return pass; } }
修改后的 IP攔截器
@Component public class IpFilterInterceptor implements HandlerInterceptor { /** * 是否啟用 */ private boolean enable; /** * 是否為白名單 */ private boolean isWhiteList; /** * 過濾器 */ private List<String> filters; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { // 停用 if (!enable) { return true; } // ----------- 加上這個(gè)就好了 ----------- if (!(handler instanceof HandlerMethod)) { return true; } String ip = Servlets.getRemoteAddr(request); // 本機(jī)不過濾 if (Const.LOCALHOST_IP_V4.equals(ip)) { return true; } // 過濾 boolean contains = false; for (String filter : filters) { if (Strings.isBlank(filter)) { continue; } // 檢測 contains = Utils.checkIpIn(ip, filter); if (contains) { break; } } // 結(jié)果 boolean pass; if (isWhiteList) { pass = contains; } else { pass = !contains; } // 返回 if (!pass) { response.setContentType(StandardContentType.APPLICATION_JSON); Servlets.transfer(response, HttpWrapper.of(ResultCode.IP_BAN).toJsonString().getBytes()); } return pass; } }
最后, 問題的原因是出在了攔截器身上 需要在 preHandle 中 判斷 handler 的類型必須是 HandlerMethod 的話才能通過
到此這篇關(guān)于SpringBoot 攔截器返回false顯示跨域問題的文章就介紹到這了,更多相關(guān)SpringBoot 跨域問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java基于socket實(shí)現(xiàn)簡易聊天室實(shí)例
這篇文章主要介紹了Java基于socket實(shí)現(xiàn)簡易聊天室的方法,實(shí)例分析了java基于socket實(shí)現(xiàn)聊天室服務(wù)端與客戶端的相關(guān)技巧,需要的朋友可以參考下2015-05-05SPRING BOOT啟動(dòng)命令參數(shù)及源碼詳析
這篇文章主要給大家介紹了關(guān)于SPRING BOOT啟動(dòng)命令參數(shù)及源碼分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SPRING BOOT具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12在idea中將java項(xiàng)目中的單個(gè)類打包成jar包操作
這篇文章主要介紹了在idea中將java項(xiàng)目中的單個(gè)類打包成jar包操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java實(shí)現(xiàn)復(fù)制文件并命名的超簡潔寫法
這篇文章主要介紹了Java實(shí)現(xiàn)復(fù)制文件并命名的超簡潔寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java語言實(shí)現(xiàn)簡單FTP軟件 FTP本地文件管理模塊實(shí)現(xiàn)(9)
這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡單FTP軟件,F(xiàn)TP本地文件管理模塊的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的三種方式小結(jié)
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的三種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11