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

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

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

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

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

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

使用全局CORS配置

您可以在Spring Boot应用程序的主类上添加@CrossOrigin注解,以允许来自所有源的请求。例如:Khl28资讯网——每日最新资讯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规则。在这个例子中,我们允许来自所有源的请求,并允许所有方法和头部。Khl28资讯网——每日最新资讯28at.com

使用局部CORS配置

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

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

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

使用自定义CORS配置

如果您需要更细粒度的CORS配置,您可以创建自定义的CorsConfiguration对象,并将其添加到CorsRegistry对象中。例如:Khl28资讯网——每日最新资讯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问题。例如:
Khl28资讯网——每日最新资讯28at.com

使用Spring Security的CORS支持

如果您正在使用Spring Security,您可以使用其提供的CORS支持来解决CORS问题。以下是一个示例配置:Khl28资讯网——每日最新资讯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对象传递给该方法。Khl28资讯网——每日最新资讯28at.com

使用过滤器解决CORS问题

您还可以创建一个自定义的过滤器来解决CORS问题。以下是一个示例配置:Khl28资讯网——每日最新资讯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对象,并将其应用到请求/响应链中。Khl28资讯网——每日最新资讯28at.com

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

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

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

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

标签:
  • 热门焦点
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 疑似小米14外观设计图曝光:后置相机模组变化不大

    下半年的大幕已经开启,而谁将成为下半年手机圈的主角就成为了大家关注的焦点,其中被传有望拿下新一代骁龙8 Gen3旗舰芯片的小米14系列更是备受大家瞩
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top