当前位置:首页 > 科技  > 软件

Spring Boot中CORS问题及解决办法,源码解析

来源: 责编: 时间:2023-11-03 09:17:19 476观看
导读CORS(跨源资源共享)是一种Web标准,允许来自不同源的Web页面共享资源。在Spring Boot应用程序中,CORS问题可能会出现,因为浏览器会阻止来自不同源的请求。默认情况下,Spring Boot允许来自同一源的请求,但会阻止来自不同源的请

CFw28资讯网——每日最新资讯28at.com

CORS(跨源资源共享)是一种Web标准,允许来自不同源的Web页面共享资源。在Spring Boot应用程序中,CORS问题可能会出现,因为浏览器会阻止来自不同源的请求。默认情况下,Spring Boot允许来自同一源的请求,但会阻止来自不同源的请求。CFw28资讯网——每日最新资讯28at.com

要解决CORS问题,您可以使用Spring Boot提供的CORS支持。以下是一些可能的解决方案:CFw28资讯网——每日最新资讯28at.com

使用全局CORS配置

您可以在Spring Boot应用程序的主类上添加@CrossOrigin注解,以允许来自所有源的请求。例如:CFw28资讯网——每日最新资讯28at.com

@SpringBootApplicationpublic class MyApplication {    public static void main(String[] args) {        SpringApplication.run(MyApplication.class, args);    }    @Bean    public WebMvcConfigurer corsConfigurer() {        return new WebMvcConfigurer() {            @Override            public void addCorsMappings(CorsRegistry registry) {                registry.addMapping("/**")                        .allowedOrigins("*")                        .allowedMethods("*")                        .allowedHeaders("*");            }        };    }}

在上面的示例中,我们创建了一个WebMvcConfigurer bean,并覆盖了addCorsMappings方法。我们使用CorsRegistry对象来定义CORS规则。在这个例子中,我们允许来自所有源的请求,并允许所有方法和头部。CFw28资讯网——每日最新资讯28at.com

使用局部CORS配置

如果您只想为特定的控制器或请求方法启用CORS,您可以在控制器类或请求方法上添加@CrossOrigin注解。例如:CFw28资讯网——每日最新资讯28at.com

@RestController@RequestMapping("/api")public class MyController {    @CrossOrigin(origins = "*", methods = "*", headers = "*")    @GetMapping("/data")    public ResponseEntity<String> getData() {        // ...    }}

在上面的示例中,我们只在getData方法上启用了CORS。我们允许来自所有源的请求,并允许所有方法和头部。CFw28资讯网——每日最新资讯28at.com

使用自定义CORS配置

如果您需要更细粒度的CORS配置,您可以创建自定义的CorsConfiguration对象,并将其添加到CorsRegistry对象中。例如:CFw28资讯网——每日最新资讯28at.com

@Beanpublic WebMvcConfigurer corsConfigurer() {    return new WebMvcConfigurer() {        @Override        public void addCorsMappings(CorsRegistry registry) {            CorsConfiguration config = new CorsConfiguration();            config.setAllowedOrigins(Arrays.asList("http://example.com", "https://example.org"));            config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));            config.setAllowedHeaders(Arrays.asList("X-Requested-With", "Content-Type", "Authorization"));            config.setAllowCredentials(true);            registry.addMapping("/**").withConfig(config);        }    };}

在上面的示例中,我们创建了一个自定义的CorsConfiguration对象,并设置了允许的源、方法、头部和凭证。然后,我们将该配置添加到CorsRegistry对象中,以应用于所有的请求路径。
除了上述方法,还有一些其他的解决方案可以用来解决Spring Boot中的CORS问题。例如:
CFw28资讯网——每日最新资讯28at.com

使用Spring Security的CORS支持

如果您正在使用Spring Security,您可以使用其提供的CORS支持来解决CORS问题。以下是一个示例配置:CFw28资讯网——每日最新资讯28at.com

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.cors().and(). ...    }    @Bean    public CorsConfigurationSource corsConfigurationSource() {        CorsConfiguration configuration = new CorsConfiguration();        configuration.setAllowedOrigins(Arrays.asList("http://example.com", "https://example.org"));        configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));        configuration.setAllowedHeaders(Arrays.asList("X-Requested-With", "Content-Type", "Authorization"));        configuration.setAllowCredentials(true);        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();        source.registerCorsConfiguration("/**", configuration);        return source;    }}

在上面的示例中,我们创建了一个CorsConfigurationSource bean,并设置了允许的源、方法、头部和凭证。然后,我们在HttpSecurity对象上调用cors()方法来启用CORS支持,并将CorsConfigurationSource对象传递给该方法。CFw28资讯网——每日最新资讯28at.com

使用过滤器解决CORS问题

您还可以创建一个自定义的过滤器来解决CORS问题。以下是一个示例配置:CFw28资讯网——每日最新资讯28at.com

@Componentpublic class CorsFilter extends OncePerRequestFilter {    @Override    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {        CorsConfiguration config = new CorsConfiguration();        config.setAllowedOrigins(Arrays.asList("http://example.com", "https://example.org"));        config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));        config.setAllowedHeaders(Arrays.asList("X-Requested-With", "Content-Type", "Authorization"));        config.setAllowCredentials(true);        CorsConfigurationSource source = new UrlBasedCorsConfigurationSource();        source.registerCorsConfiguration("/**", config);        CorsFilter corsFilter = new CorsFilter(source);        corsFilter.doFilter(request, response, filterChain);    }}

在上面的示例中,我们创建了一个自定义的CorsFilter类,并覆盖了doFilterInternal方法。在这个方法中,我们创建了一个CorsConfiguration对象,并设置了允许的源、方法、头部和凭证。然后,我们创建了一个UrlBasedCorsConfigurationSource对象,并将CorsConfiguration对象注册到该对象中。最后,我们创建了一个CorsFilter对象,并将其应用到请求/响应链中。CFw28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16753-0.htmlSpring Boot中CORS问题及解决办法,源码解析

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 用积分神经网络在一分钟内转换DNN

下一篇: 程序员福音——CodeGeeX智能编程助手

标签:
  • 热门焦点
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
Top