SpringBoot项目支持跨域访问配置

本文介绍两种SpringBoot项目中实现跨域访问的方法:一是通过配置类实现全局跨域设置;二是通过启动类注入CorsWebFilter实现跨域。两种方式均可允许任意来源、任意方法和任意头部信息,并支持凭据传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、方式一:新建配置类如下

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedHeaders(CorsConfiguration.ALL)
                .allowedMethods(CorsConfiguration.ALL)
                .allowCredentials(true)
                .maxAge(3600); // 一个小时内不需要再预检(发送OPTIONS请求)
    }
}

  启动类添加包扫描

@ComponentScan("com.test.test")

2、方式二:在启动类中添加bean,不需要包扫描

/**
     * 配置跨域
     * @return
     */
    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(Boolean.TRUE);
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.setMaxAge(3600L);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**",config);
        return new CorsWebFilter(source);
    }

 

### 解决Spring Boot项目的CORS(资源共享)问题 #### 方法一:使用`@CrossOrigin`注解 在Spring Boot中,最简单的方法之一是在控制器类或特定方法上使用`@CrossOrigin`注解来启用支持。此注解能够指定哪些源被允许访问资源,还可以配置允许的HTTP动词和其他选项。 ```java @RestController @RequestMapping("/api") public class MyController { @CrossOrigin(origins = "http://example.com", methods = {RequestMethod.GET, RequestMethod.POST}) @GetMapping("/data") public ResponseEntity<String> getData() { return new ResponseEntity<>("Data from server", HttpStatus.OK); } } ``` 这种方法适用于小型应用程序或是只需要针对某些接口开放的情况[^1]。 #### 方法二:全局配置CORS 对于更复杂的场景或者是希望在整个应用范围内统一管理策略的应用程序来说,可以通过创建一个实现了`WebMvcConfigurer`接口并重写其`addCorsMappings()`方法的配置类来进行全局性的CORS设置: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 对所有的路径都生效 .allowedOrigins("*") // 允许来自任何源的请求 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 支持上述提到的所有HTTP动作 .maxAge(3600); // 预检请求的有效期为一个小时 } } ``` 这种方式不仅简化了代码结构,而且使得维护更加方便[^2]。 #### 方法三:自定义过滤器 当需要对行为做进一步定制化调整时,则可以考虑编写自己的过滤器,在其中手动处理CORS响应头的信息。这通常涉及到实现`Filter`接口,并注册到Spring容器中去执行具体的逻辑操作。 ```java @Component public class CorsFilter extends OncePerRequestFilter { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "authorization, content-type"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { filterChain.doFilter(request, response); } logger.info("CORS filter is applied."); } } ``` 这种做法虽然灵活性最高但也增加了复杂度,因此只建议在确实有必要的情况下采用[^4]。 综上所述,根据具体的需求可以选择不同的方式来解决Spring Boot项目中的CORS问题。如果只是简单的几个API接口涉及到了访问的话推荐直接利用`@CrossOrigin`注解;而对于整个系统的规则则更适合通过全局配置的方式来完成;而特殊情况下才需要用到自定义过滤器这样的高级手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值