中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解決springboot設置CorsFilter跨域不生效問題

發布時間:2021-11-16 10:26:20 來源:億速云 閱讀:649 作者:iii 欄目:開發技術

這篇文章主要講解了“怎么解決springboot設置CorsFilter跨域不生效問題”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么解決springboot設置CorsFilter跨域不生效問題”吧!

設置CorsFilter跨域不生效的解決

問題描述

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

問題原因是是寫的判斷登錄的filter影響了登錄,原因是的這個filter執行順序在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) 是否發送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) 注解設置過濾器的執行順序

order的規則

1. order的值越小,優先級越高

2. order如果不標注數字,默認最低優先級,因為其默認值是int最大值

3. 該注解等同于實現Ordered接口getOrder方法,并返回數字。

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

因為這個CorsConfig并沒有實現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的優先執行順序
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }
}

感謝各位的閱讀,以上就是“怎么解決springboot設置CorsFilter跨域不生效問題”的內容了,經過本文的學習后,相信大家對怎么解決springboot設置CorsFilter跨域不生效問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会理县| 铜陵市| 弥渡县| 夏邑县| 东台市| 且末县| 磴口县| 五指山市| 荔浦县| 延津县| 潮州市| 河北区| 海阳市| 凭祥市| 什邡市| 龙川县| 禄丰县| 孟津县| 许昌县| 乌拉特后旗| 东乡县| 台安县| 晋中市| 新竹县| 福贡县| 宜春市| 兰坪| 万山特区| 浦江县| 前郭尔| 晋江市| 马关县| 和硕县| 河曲县| 冷水江市| 尚义县| 万宁市| 泸定县| 昌吉市| 河东区| 乐亭县|