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

springboot 設(shè)置CorsFilter跨域不生效的解決

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

設(shè)置CorsFilter跨域不生效的解決

問題描述

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

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

解決方案

/**
 * 使用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) 允許的請(qǐng)求方式
        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.添加映射路徑,我們攔截一切請(qǐng)求
        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不生效原因

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

order的規(guī)則

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

2. order如果不標(biāo)注數(shù)字,默認(rèn)最低優(yōu)先級(jí),因?yàn)槠淠J(rèn)值是int最大值

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

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

因?yàn)檫@個(gè)CorsConfig并沒有實(shí)現(xiàn)Filter接口,即使加上 @Order 注解也不會(huì)生效,需要通過如下新的方式返回一個(gè)新的FilterRegistrationBean出去,并設(shè)置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
 * 跨域請(qǐng)求配置
 *
 * @author 725
 * @date 2020/12/10 18:17
 */
@Slf4j
@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1 設(shè)置訪問源地址
        corsConfiguration.addAllowedOrigin("*");
        // 2 設(shè)置訪問源請(qǐng)求頭
        corsConfiguration.addAllowedHeader("*");
        // 3 設(shè)置訪問源請(qǐng)求方法
        corsConfiguration.addAllowedMethod("*");
        // 4 暴露哪些頭部信息
        corsConfiguration.addExposedHeader(JwtConstant.HEADER);
        return corsConfiguration;
    }
    /**
	@Bean
    public CorsFilter corsFilter() {
        log.info("跨域設(shè)置。。。。");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 對(duì)接口配置跨域設(shè)置
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
    */
    
    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilter() {
        log.info("跨域設(shè)置。。。。");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 5 對(duì)接口配置跨域設(shè)置
        source.registerCorsConfiguration("/**", buildConfig());
        //有多個(gè)filter時(shí)此處設(shè)置改CorsFilter的優(yōu)先執(zhí)行順序
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring 使用Validation 驗(yàn)證框架的問題詳解

    Spring 使用Validation 驗(yàn)證框架的問題詳解

    Spring Boot在內(nèi)部通過集成hibernate-validation已經(jīng)實(shí)現(xiàn)了JSR-349驗(yàn)證規(guī)范接口,在Spring Boot項(xiàng)目中只要直接使用就行了。 一般用在Controller中用于驗(yàn)證前端傳來的參數(shù)。這篇文章給大家介紹Spring Validation 驗(yàn)證框架的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-07-07
  • Idea跑的項(xiàng)目沒問題將程序install成jar包運(yùn)行報(bào)錯(cuò)空指針的問題

    Idea跑的項(xiàng)目沒問題將程序install成jar包運(yùn)行報(bào)錯(cuò)空指針的問題

    這篇文章主要介紹了Idea跑的項(xiàng)目沒問題,將程序install成jar包運(yùn)行報(bào)錯(cuò)空指針的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java操作Redis緩存設(shè)置過期時(shí)間的方法

    java操作Redis緩存設(shè)置過期時(shí)間的方法

    這篇文章主要介紹了java操作Redis緩存設(shè)置過期時(shí)間的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • SpringBoot整合JPA數(shù)據(jù)源方法及配置解析

    SpringBoot整合JPA數(shù)據(jù)源方法及配置解析

    這篇文章主要介紹了SpringBoot整合JPA數(shù)據(jù)源方法及配置解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 使用Mybatis-plus實(shí)現(xiàn)時(shí)間自動(dòng)填充(代碼直接可用)

    使用Mybatis-plus實(shí)現(xiàn)時(shí)間自動(dòng)填充(代碼直接可用)

    這篇文章主要介紹了使用Mybatis-plus實(shí)現(xiàn)時(shí)間自動(dòng)填充(代碼直接可用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring配置類源碼分析詳解

    Spring配置類源碼分析詳解

    這篇文章主要介紹了Spring配置類解析源碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Spring實(shí)戰(zhàn)之注入嵌套Bean操作示例

    Spring實(shí)戰(zhàn)之注入嵌套Bean操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之注入嵌套Bean操作,結(jié)合實(shí)例形式分析了嵌套Bean相關(guān)配置與使用操作技巧,需要的朋友可以參考下
    2019-11-11
  • java實(shí)現(xiàn)將ftp和http的文件直接傳送到hdfs

    java實(shí)現(xiàn)將ftp和http的文件直接傳送到hdfs

    前面幾篇文章,我們已經(jīng)做了很好的鋪墊了,幾個(gè)要用到的工具我們都做了出來,本文就是將他們集合起來,說下具體的用法,小伙伴們可以參考下。
    2015-03-03
  • SpringMVC中的表現(xiàn)層結(jié)果封裝

    SpringMVC中的表現(xiàn)層結(jié)果封裝

    這篇文章主要介紹了SpringMVC中的表現(xiàn)層結(jié)果封裝,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java?mybatis?開發(fā)自定義插件

    Java?mybatis?開發(fā)自定義插件

    這篇文章主要介紹了Java?mybatis開發(fā)自定義插件,MyBatis允許你在映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08

最新評(píng)論