springboot 设置CorsFilter跨域不生效的解决
程序员文章站
2022-03-10 20:28:38
目录设置corsfilter跨域不生效的解决问题描述解决方案跨域配置corsfilter不生效原因order的规则设置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; } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
layui中select,radio设置不生效的解决方法
-
Springboot解决ajax+自定义headers的跨域请求问题
-
解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题
-
springboot解决前后端分离时的跨域问题
-
layui中select,radio设置不生效的解决方法
-
基于SpringBoot解决CORS跨域的问题(@CrossOrigin)
-
关于Linux系统(Ubuntu14.04)上QComboBox设置qss样式表字体颜色color属性不生效或只对下拉列表生效的解决方案
-
springboot跨域过滤器与swagger拦截器冲突的解决方案
-
springboot 设置允许跨域的方法
-
mongoose设置unique不生效问题的解决及如何移除unique的限制