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

springboot 設置CorsFilter跨域不生效的解決

 更新時間:2021年11月16日 08:54:01   作者:小松博客  
這篇文章主要介紹了springboot 設置CorsFilter跨域不生效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

設置CorsFilter跨域不生效的解決

問題描述

公司的前后端開發(fā)項目工程,在本地調試的時候遇到了跨域的問題,同事調我的服務一直提示跨域問題,然后前端nb他自己在哪里做了跨域處理,類似nginx那種,但是我還是百度去看了一下,在一個大佬的博客中發(fā)現(xiàn)了解決方案。

問題原因是是寫的判斷登錄的filter影響了登錄,原因是的這個filter執(zhí)行順序在corsfilter之前導致,于是修改了一下跨域設置的配置文件

解決方案

/**
 * 使用CORS,用于解決ajax跨域訪問問題
 */
@Configuration
public class GlobalCorsConfig {
    @Bean
    public FilterRegistrationBean corsFilter() {
        //1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //1) 允許的域,不要寫*,否則cookie就無法使用了
        //config.addAllowedOrigin("http://manage.leyou.com");
        //config.addAllowedOrigin("http://www.leyou.com");
        config.addAllowedOrigin("*");
        //2) 是否發(fā)送Cookie信息
        config.setAllowCredentials(true);
        //3) 允許的請求方式
        config.addAllowedMethod("OPTIONS");
        config.addAllowedMethod("HEAD");
        config.addAllowedMethod("GET");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        config.setMaxAge(3600L);
        // 4)允許的頭信息
        config.addAllowedHeader("*");
 
        //2.添加映射路徑,我們攔截一切請求
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
 
        //3.返回新的CorsFilter.
        //return new CorsFilter(configSource);
 
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(configSource));
        bean.setOrder(0);
        return bean;
    }
}

跨域配置CorsFilter不生效原因

項目中有多個Filter時,需要通過 @Order(Ordered.HIGHEST_PRECEDENCE) 注解設置過濾器的執(zhí)行順序

order的規(guī)則

1. order的值越小,優(yōu)先級越高

2. order如果不標注數(shù)字,默認最低優(yōu)先級,因為其默認值是int最大值

3. 該注解等同于實現(xiàn)Ordered接口getOrder方法,并返回數(shù)字。

如果使用如下注釋掉的方法進行設置跨域,F(xiàn)ilter的doFilter()方法中直接return出去時,前端會提示跨域

因為這個CorsConfig并沒有實現(xiàn)Filter接口,即使加上 @Order 注解也不會生效,需要通過如下新的方式返回一個新的FilterRegistrationBean出去,并設置order

import com.nanase.takeshi.constants.JwtConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
 * CorsConfig
 * 跨域請求配置
 *
 * @author 725
 * @date 2020/12/10 18:17
 */
@Slf4j
@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1 設置訪問源地址
        corsConfiguration.addAllowedOrigin("*");
        // 2 設置訪問源請求頭
        corsConfiguration.addAllowedHeader("*");
        // 3 設置訪問源請求方法
        corsConfiguration.addAllowedMethod("*");
        // 4 暴露哪些頭部信息
        corsConfiguration.addExposedHeader(JwtConstant.HEADER);
        return corsConfiguration;
    }
    /**
	@Bean
    public CorsFilter corsFilter() {
        log.info("跨域設置。。。。");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 對接口配置跨域設置
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
    */
    
    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilter() {
        log.info("跨域設置。。。。");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 5 對接口配置跨域設置
        source.registerCorsConfiguration("/**", buildConfig());
        //有多個filter時此處設置改CorsFilter的優(yōu)先執(zhí)行順序
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 淺談使用Java Web獲取客戶端真實IP的方法示例詳解

    淺談使用Java Web獲取客戶端真實IP的方法示例詳解

    這篇文章主要介紹了使用Java-Web獲取客戶端真實IP的方法示例詳解。一般我們無法獲取客戶端真實IP,原因是:當我們通過request獲取客戶端IP時,自身服務器通常會為了保護信息或者負載均衡的目的,對自身服務器做反向代理。對此感興趣可以了解一下
    2020-07-07
  • 如何使用 Shell 腳本查看多個服務器的端口是否打開的方法

    如何使用 Shell 腳本查看多個服務器的端口是否打開的方法

    這篇文章主要介紹了如何使用 Shell 腳本來查看多個服務器的端口是否打開的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Java 添加、讀取和刪除 Excel 批注的操作代碼

    Java 添加、讀取和刪除 Excel 批注的操作代碼

    這篇文章主要介紹了Java 添加、讀取和刪除 Excel 批注的操作方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • SparkSQL使用快速入門

    SparkSQL使用快速入門

    spark SQL是spark的一個模塊,主要用于進行結構化數(shù)據(jù)的處理。它提供的最核心的編程抽象就是DataFrame。這篇文章主要介紹了SparkSQL使用快速入門,需要的朋友可以參考下
    2021-08-08
  • JAVA如何調用wsdl過程詳解

    JAVA如何調用wsdl過程詳解

    這篇文章主要介紹了JAVA如何調用wsdl過程詳解,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • springboot Mongodb的集成與使用實例詳解

    springboot Mongodb的集成與使用實例詳解

    這篇文章主要介紹了springboot Mongodb的集成與使用實例詳解,需要的朋友可以參考下
    2018-04-04
  • mybatis-plus阻止全表更新與刪除的實現(xiàn)

    mybatis-plus阻止全表更新與刪除的實現(xiàn)

    BlockAttackInnerInterceptor 是mybatis-plus的一個內置攔截器,用于防止惡意的全表更新或刪除操作,本文主要介紹了mybatis-plus阻止全表更新與刪除的實現(xiàn),感興趣的可以了解一下
    2023-12-12
  • 在Java中Scanner的用法總結

    在Java中Scanner的用法總結

    這篇文章主要介紹了在Java中Scanner的用法總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • MyBatis屬性名和字段名不一致的問題解決方法

    MyBatis屬性名和字段名不一致的問題解決方法

    這篇文章給大家詳細介紹了MyBatis屬性名和字段名不一致的問題解決,文中有詳細的代碼示例和圖文展示供大家參考,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • springboot如何去獲取前端傳遞的參數(shù)的實現(xiàn)

    springboot如何去獲取前端傳遞的參數(shù)的實現(xiàn)

    這篇文章主要介紹了springboot如何去獲取前端傳遞的參數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05

最新評論

墨脱县| 金川县| 潜江市| 荥阳市| 庆阳市| 刚察县| 峨眉山市| 将乐县| 广元市| 吉隆县| 铜梁县| 利川市| 阳原县| 二手房| 广汉市| 锡林郭勒盟| 虞城县| 隆回县| 抚松县| 石河子市| 大化| 安顺市| 嘉善县| 黄大仙区| 本溪市| 娄底市| 长白| 永济市| 介休市| 通州区| 卢湾区| 七台河市| 沅江市| 佛冈县| 黄冈市| 云阳县| 禹州市| 海门市| 汽车| 石棉县| 大方县|