欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot?攔截器返回false顯示跨域問題

 更新時(shí)間:2022年04月22日 11:43:08   作者:??lijiahangmax????  
這篇文章主要介紹了SpringBoot?攔截器返回false顯示跨域問題,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下

?項(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)簡易聊天室的方法,實(shí)例分析了java基于socket實(shí)現(xiàn)聊天室服務(wù)端與客戶端的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Java8 lambda表達(dá)式2種常用方法代碼解析

    Java8 lambda表達(dá)式2種常用方法代碼解析

    這篇文章主要介紹了Java8 lambda表達(dá)式2種常用方法代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java常用的時(shí)間工具類實(shí)例

    Java常用的時(shí)間工具類實(shí)例

    這篇文章主要介紹了Java常用的時(shí)間工具類,結(jié)合具體實(shí)例形式分析了java日期時(shí)間的常用轉(zhuǎn)換、判斷、輸出相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Java 多線程之兩步掌握

    Java 多線程之兩步掌握

    Java 多線程編程 Java給多線程編程提供了內(nèi)置的支持。一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)
    2021-10-10
  • 使用SpringBoot請求參數(shù)過濾空格

    使用SpringBoot請求參數(shù)過濾空格

    這篇文章主要介紹了使用SpringBoot請求參數(shù)過濾空格的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SPRING BOOT啟動(dòng)命令參數(shù)及源碼詳析

    SPRING 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包操作

    這篇文章主要介紹了在idea中將java項(xiàng)目中的單個(gè)類打包成jar包操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java實(shí)現(xiàn)復(fù)制文件并命名的超簡潔寫法

    Java實(shí)現(xiàn)復(fù)制文件并命名的超簡潔寫法

    這篇文章主要介紹了Java實(shí)現(xiàn)復(fù)制文件并命名的超簡潔寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java語言實(shí)現(xiàn)簡單FTP軟件 FTP本地文件管理模塊實(shí)現(xiàn)(9)

    Java語言實(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-04
  • SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的三種方式小結(jié)

    SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的三種方式小結(jié)

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的三種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論