码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBoot Cors配置+原理分析(corsfilter)


    (951条消息) [心得]SpringBoot使用addCorsMappings配置跨域的坑_weixin_33958585的博客-CSDN博客icon-default.png?t=M5H6https://blog.csdn.net/weixin_33958585/article/details/88678712-----------------------------------------------------------------------------------------------------------------------------

    (951条消息) SpringBoot中addCorsMappings配置跨域与拦截器互斥问题的原因研究_huangyaa729的博客-CSDN博客icon-default.png?t=M5H6https://blog.csdn.net/huangyaa729/article/details/103893660springboot CORS 跨域请求解决三大方案,springboot CorsFilter解决跨域问题 - 蕃薯耀 - 博客园 (cnblogs.com)icon-default.png?t=M5H6https://www.cnblogs.com/fanshuyao/p/14030944.html-----------------------------------------------------------------------------------------------------------------------------

    (951条消息) 跨域的那些事 - CorsWebFilter 跨域源码分析(二)_Lewis·fk的博客-CSDN博客_corswebfiltericon-default.png?t=M5H6https://blog.csdn.net/fk1778770286/article/details/115734587一文弄懂 CORS 跨域(前端+后端代码实例讲解) - 掘金 (juejin.cn)icon-default.png?t=M5H6https://juejin.cn/post/6844904055148380173(951条消息) SpringBoot跨域设置(CORS)_骑个小蜗牛的博客-CSDN博客_springboot跨域配置icon-default.png?t=M5H6https://blog.csdn.net/JokerLJG/article/details/123659384Spring Boot 解决 CORS 跨域问题 | 程序员技术之旅 (zhangbj.com)icon-default.png?t=M5H6https://www.zhangbj.com/p/522.html

    问题描述

    公司的前后端开发项目工程,在本地调试的时候遇到了跨域的问题,同事调我的服务一直提示跨域问题,然后前端nb他自己在哪里做了跨域处理,类似nginx那种,但是我还是百度去看了一下,在一个大佬的博客中发现了解决方案。

    问题原因是是写的判断登录的filter影响了登录,原因是的这个filter执行顺序在corsfilter之前导致,于是修改了一下跨域设置的配置文件

    解决方案

    1. /**
    2. * 使用CORS,用于解决ajax跨域访问问题
    3. */
    4. @Configuration
    5. public class GlobalCorsConfig {
    6. @Bean
    7. public FilterRegistrationBean corsFilter() {
    8. //1.添加CORS配置信息
    9. CorsConfiguration config = new CorsConfiguration();
    10. //1) 允许的域,不要写*,否则cookie就无法使用了
    11. //config.addAllowedOrigin("http://manage.leyou.com");
    12. //config.addAllowedOrigin("http://www.leyou.com");
    13. config.addAllowedOrigin("*");
    14. //2) 是否发送Cookie信息
    15. config.setAllowCredentials(true);
    16. //3) 允许的请求方式
    17. config.addAllowedMethod("OPTIONS");
    18. config.addAllowedMethod("HEAD");
    19. config.addAllowedMethod("GET");
    20. config.addAllowedMethod("PUT");
    21. config.addAllowedMethod("POST");
    22. config.addAllowedMethod("DELETE");
    23. config.addAllowedMethod("PATCH");
    24. config.setMaxAge(3600L);
    25. // 4)允许的头信息
    26. config.addAllowedHeader("*");
    27. //2.添加映射路径,我们拦截一切请求
    28. UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
    29. configSource.registerCorsConfiguration("/**", config);
    30. //3.返回新的CorsFilter.
    31. //return new CorsFilter(configSource);
    32. FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(configSource));
    33. bean.setOrder(0);
    34. return bean;
    35. }
    36. }

     

    跨域配置CorsFilter不生效原因

    项目中有多个Filter时,需要通过 @Order(Ordered.HIGHEST_PRECEDENCE) 注解设置过滤器的执行顺序

    order的规则

    1. order的值越小,优先级越高

    2. order如果不标注数字,默认最低优先级,因为其默认值是int最大值

    3. 该注解等同于实现Ordered接口getOrder方法,并返回数字。

    如果使用如下注释掉的方法进行设置跨域,Filter的doFilter()方法中直接return出去时,前端会提示跨域

    因为这个CorsConfig并没有实现Filter接口,即使加上 @Order 注解也不会生效,需要通过如下新的方式返回一个新的FilterRegistrationBean出去,并设置order

    1. import com.nanase.takeshi.constants.JwtConstant;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.boot.web.servlet.FilterRegistrationBean;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. import org.springframework.core.Ordered;
    7. import org.springframework.web.cors.CorsConfiguration;
    8. import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    9. import org.springframework.web.filter.CorsFilter;
    10. /**
    11. * CorsConfig
    12. * 跨域请求配置
    13. *
    14. * @author 725
    15. * @date 2020/12/10 18:17
    16. */
    17. @Slf4j
    18. @Configuration
    19. public class CorsConfig {
    20. private CorsConfiguration buildConfig() {
    21. CorsConfiguration corsConfiguration = new CorsConfiguration();
    22. // 1 设置访问源地址
    23. corsConfiguration.addAllowedOrigin("*");
    24. // 2 设置访问源请求头
    25. corsConfiguration.addAllowedHeader("*");
    26. // 3 设置访问源请求方法
    27. corsConfiguration.addAllowedMethod("*");
    28. // 4 暴露哪些头部信息
    29. corsConfiguration.addExposedHeader(JwtConstant.HEADER);
    30. return corsConfiguration;
    31. }
    32. /**
    33. @Bean
    34. public CorsFilter corsFilter() {
    35. log.info("跨域设置。。。。");
    36. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    37. // 对接口配置跨域设置
    38. source.registerCorsConfiguration("/**", buildConfig());
    39. return new CorsFilter(source);
    40. }
    41. */
    42. @Bean
    43. public FilterRegistrationBean<CorsFilter> corsFilter() {
    44. log.info("跨域设置。。。。");
    45. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    46. // 5 对接口配置跨域设置
    47. source.registerCorsConfiguration("/**", buildConfig());
    48. //有多个filter时此处设置改CorsFilter的优先执行顺序
    49. FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
    50. bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    51. return bean;
    52. }
    53. }

  • 相关阅读:
    未来SEO的发展方向是如何
    php安装ldap扩展模块
    Three.js——基础材质、深度材质、法向材质、面材质、朗伯材质、Phong材质、着色器材质、直线和虚线、联合材质
    JAVA:实现MinPriorityQueue最小优先级队列算法(附完整源码)
    gRPC服务的定义和服务的种类
    Nacos身份绕过漏洞复现(QVD-2023-6271)
    深入理解final关键字
    自动控制一些知识
    Lambda 表达式
    PyTorch 从tensor.grad 看 backward(权重参数) 和 gradient accumulated
  • 原文地址:https://blog.csdn.net/z69183787/article/details/125450234
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号