首页 > 其他分享 >【踩坑记录】SpringBoot跨域配置不生效

【踩坑记录】SpringBoot跨域配置不生效

时间:2023-02-20 14:14:43浏览次数:57  
标签:浏览器 请求 认证 Filter 跨域 生效 OPTIONS SpringBoot

问题复现:

明明在拦截器里配置了跨域,就是不生效,使用PostMan等后端调试工具调试,均正常,Response中有Access-Control-Allow-Origin: *,这个Header,但是前端一直反馈,通过浏览器js代码fetch报跨域问题。如图:

 

 嗯,,,看看浏览器请求:

 

 确实在报CORS错误

问题分析:

看到这个浏览器请求对http比较了解的同学可能已经猜到大概了,对于非Simple请求,浏览器会先发送一次OPTIONS请求,坑就在这里,如果我们用了自定义的header,就不是Simple请求,意味着会发送一次OPTIONS,就是上面浏览器调试工具中的preflight,就是这个请求出现了跨域问题。继续分析后端代码,问题出现了:

本次项目安全认证做在了Filter中,其实这个没问题,好多项目都是在Filter中做的安全认证,不过,它的CORS配置配在了拦截器中(Interceptor),而且在权限认证Filter认证失败时直接返回,导致没有经过拦截器,直接返回了。不过这种情况也不正常,因为即使安全认证没通过的请求没经过过滤器直接返回了,那正常能通过安全认证的请求应该正常返回跨域啊,为什么通过postman请求一切正常,浏览器却报错呢?原因就是我们上面提到的,后端没有对OPTIONS请求做单独处理,意味着OPTIONS请求也会经过安全认证的Filter,而浏览器发出的OPTIONS请求是没有携带安全认证Header的,所以必然认证失败,然后直接返回,没有加CORS的Header,导致请求本身能访问,但preflight过不了安全认证Filter访问不了,直接返回跨域问题。

问题解决:

找到原因,剩下的就比较简单了,把CORS配置放到Filter上,并且把优先级提高,起码要在AuthFilter之前,再测试没问题啦

 

标签:浏览器,请求,认证,Filter,跨域,生效,OPTIONS,SpringBoot
From: https://www.cnblogs.com/maerpao/p/17137148.html

相关文章

  • SpringBoot脚手架项目002-005.Spring 约定编程、Spring AOP
    SpringBoot脚手架项目文章目录文章目录​​SpringBoot脚手架项目文章目录​​​​Spring约定编程​​​​约定编程到底是什么​​​​SpringAOP​​Spring约定编程为什么要......
  • SpringBoot脚手架项目002-004.Spring IOC_权限管理系统_Spring:什么是IOC、Spring Bea
    SpringBoot脚手架项目002__权限管理系统文章目录​​SpringBoot脚手架项目002__权限管理系统​​​​前言​​​​依赖注入的例子​​​​最终我们是怎么来去克服这种问题的......
  • springboot ElasticsearchRepository date_histogram 聚合查询
    NativeSearchQueryBuildernsqb=newNativeSearchQueryBuilder();DateHistogramAggregationBuilderdhb=AggregationBuilders.dateHistog......
  • springboot Elasticsearch 实体创建索引设置Date 类型字段失败
    springbootElasticsearch实体创建索引设置Date类型字段失败,需添加以下注解@Field(type=FieldType.Date,format=DateFormat.custom,patter......
  • springboot实现文件上传下载
    1.用IDEA创建名叫springboot-file的SpringBoot项目,并将Packagename改为com.example.springboot,导入SpringWeb和thymeleaf依赖。(如果创建过程中遇到了问题,可以看我写的文......
  • SpringBoot文件上传
    文件上传引入依赖<!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifact......
  • SpringBoot升级到3.0
    SpringBoot3.0出来有一段时间了,一直没时间来整理,这次来看一下吧。SpringBoot可以轻松创建独立的、生产级的基于Spring的应用程序,您可以“直接运行”。1.SpringBoo......
  • vue-跨域问题解决方案
    1.使用django-cors-headers解决跨域问题1.使用pip安装pipinstalldjango-cors-headers2.添加到setting的app中INSTALLED_APPS=( ... 'corsheaders', ...)//......
  • 跨域请求
    目录跨域请求--CORS两种请求返回格式添加django使用django-cors-headers解决跨域问题跨域请求--CORS两种请求CORS基本流程浏览器将CORS请求分成两类:简单请求(simplere......
  • linux limits.conf 生效,linux修改limits.conf不生效
    正常情况下,/etc/security/limits.conf的改动,应该在下次访问时就生效才对。一、修改方法1.临时方法为了优化linux性能,可能需要修改这个最大值。临时修改的话ulimit-n......