springboot 跨域解决全局方案:使用Filter

本文介绍了如何在Spring Boot应用中使用@Configuration注解创建WebAppConfigurer类,通过@Bean方法实现CorsFilter,解决HTTP请求从'http://localhost:8000'到应用服务器的跨域访问问题。

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

@Configuration
public class WebAppConfigurer extends WebMvcConfigurerAdapter {

    @Bean
    public FilterRegistrationBean corsFilter() {

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        CorsConfiguration config = new CorsConfiguration();

        //解决跨域访问问题

    ​    ​config.addAllowedOrigin("http://localhost:8000");

        config.addAllowedHeader("*");

        config.addAllowedMethod("*");

        config.setAllowCredentials(true);

        source.registerCorsConfiguration("/v1/**", config);

        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));

        return bean;

    }

}

 

### Spring Boot 中解决 CORS 问题的方案 #### 使用 `@CrossOrigin` 注解 在控制器方法级别或者类级别可以使用 `@CrossOrigin` 注解来允许特定的请求。这种方式适用于简单的场景,比如只需要为某个接口开放访问。 ```java import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @CrossOrigin(origins = "http://example.com", maxAge = 3600) public class MyController { @GetMapping("/data") public String getData() { return "This is data"; } } ``` 上述代码片段展示了如何通过注解方式指定允许的源 (`origins`) 和缓存时间 (`maxAge`) 来实现支持[^1]。 --- #### 配置全局 CORS 支持(基于 WebMvcConfigurer) 如果需要在整个应用程序范围内启用 CORS,则可以通过实现 `WebMvcConfigurer` 接口并重写其方法来进行配置: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 对所有路径生效 .allowedOrigins("http://example.com") // 允许的名 .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法 .allowedHeaders("*") // 允许的头部字段 .allowCredentials(true); // 是否允许携带凭证 } } ``` 此示例说明了如何定义一个通用的 CORS 策略,并将其应用于整个应用的所有 API 请求中[^2]。 --- #### 编写自定义 Filter 过滤器 对于更复杂的需求,还可以创建一个自定义的过滤器来手动设置响应头信息。这种方法更加灵活,能够满足特殊业务逻辑的要求。 ```java import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; @Component public class CustomCorsFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { response.setHeader("Access-Control-Allow-Origin", "http://example.com"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "*"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { filterChain.doFilter(request, response); } } } ``` 这段代码展示了一个定制化的解决方案,在其中可以直接控制 HTTP 响应头的内容以适应具体的策略。 --- #### 开箱即用的模板项目推荐 为了快速搭建具备功能的应用程序,可参考开源项目 **springboot3x-template** 提供的功能模块化设计思路。该项目已经集成了多种常见的依赖库和技术栈组合,极大地方便开发者专注于核心业务逻辑而不必重复造轮子[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值