最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

?項(xiàng)目最近添加了一個(gè)ip黑白名單的功能, 發(fā)現(xiàn)如果ip過濾的攔截器返回 false 后前端會顯示跨域, 嘗試修改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實(shí)現(xiàn)抖音飛機(jī)大作戰(zhàn)

    java實(shí)現(xiàn)抖音飛機(jī)大作戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)抖音飛機(jī)大作戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 淺談Java自定義注解和運(yùn)行時(shí)靠反射獲取注解

    淺談Java自定義注解和運(yùn)行時(shí)靠反射獲取注解

    下面小編就為大家?guī)硪黄獪\談Java自定義注解和運(yùn)行時(shí)靠反射獲取注解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • 詳解Spring中bean的幾種注入方式

    詳解Spring中bean的幾種注入方式

    這篇文章主要介紹了詳解Spring中bean的幾種注入方式,主要介紹了4種注入,主要有屬性注入、構(gòu)造函數(shù)注入、工廠方法注入,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Java 添加、替換、刪除PDF中的圖片的示例代碼

    Java 添加、替換、刪除PDF中的圖片的示例代碼

    這篇文章主要介紹了Java 添加、替換、刪除PDF中的圖片,本文通過示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot項(xiàng)目如何使用多線程執(zhí)行定時(shí)任務(wù)

    SpringBoot項(xiàng)目如何使用多線程執(zhí)行定時(shí)任務(wù)

    在SpringBoot項(xiàng)目中使用多線程執(zhí)行定時(shí)任務(wù),可以避免一個(gè)耗時(shí)任務(wù)影響其他任務(wù),通過配置線程池任務(wù)調(diào)度器,Spring會自動使用多線程執(zhí)行定時(shí)任務(wù)
    2025-01-01
  • FreeSWITCH跨NAT部署配置詳解

    FreeSWITCH跨NAT部署配置詳解

    這篇文章主要為大家介紹了FreeSWITCH跨NAT部署配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • CompletableFuture?異步編排示例詳解

    CompletableFuture?異步編排示例詳解

    這篇文章主要為大家介紹了CompletableFuture?異步編排示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 使用ElasticSearch6.0快速實(shí)現(xiàn)全文搜索功能的示例代碼

    使用ElasticSearch6.0快速實(shí)現(xiàn)全文搜索功能的示例代碼

    本篇文章主要介紹了使用ElasticSearch6.0快速實(shí)現(xiàn)全文搜索功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java創(chuàng)建圖形用戶界面(GUI)入門詳細(xì)指南(Swing庫JFrame類)

    Java創(chuàng)建圖形用戶界面(GUI)入門詳細(xì)指南(Swing庫JFrame類)

    這篇文章主要介紹了使用Java?Swing庫的JFrame類創(chuàng)建基本的圖形用戶界面,包括窗口的創(chuàng)建、組件的添加和事件處理,通過代碼講解了如何設(shè)置窗口大小、添加按鈕及處理按鈕點(diǎn)擊事件,適合初學(xué)者學(xué)習(xí)和開發(fā)GUI應(yīng)用程序,需要的朋友可以參考下
    2024-11-11
  • net.sf.json.JSONObject 為null 的判斷方法

    net.sf.json.JSONObject 為null 的判斷方法

    下面小編就為大家?guī)硪黄猲et.sf.json.JSONObject 為null 的判斷方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論

云南省| 府谷县| 华亭县| 绥阳县| 桃源县| 南江县| 花莲县| 陆川县| 龙门县| 宣威市| 株洲市| 济宁市| 唐河县| 平阴县| 明光市| 井陉县| 临潭县| 岗巴县| 蕲春县| 南通市| 马龙县| 平顺县| 犍为县| 逊克县| 宜君县| 巴彦淖尔市| 定州市| 石门县| 昭觉县| 葫芦岛市| 甘孜县| 宁津县| 广平县| 南京市| 萨嘎县| 洛川县| 黄骅市| 抚顺县| 万年县| 武功县| 武宣县|