欢迎光临散文网 会员登陆 & 注册

SpringBoot 如何解决跨域问题?

2023-08-30 15:17 作者:程序员的勇敢  | 我要投稿

跨域问题应该是我们日常开发中比较常见的,在Spring Boot应用中,通常解决跨域问题(Cross-Origin Resource Sharing,CORS)有如下四种方法:

1. 使用 @CrossOrigin 注解

在Controller类或方法上使用@CrossOrigin注解可以很容易地解决跨域问题。这是最简单和最直接的方法。

 @RestController
 @CrossOrigin(origins = "http://example.com") // 允许该域名的跨域访问
 public class MyController {
 
     @GetMapping("/some-resource")
     public String someResource() {
         return "Hello, World!";
    }
 }

2. 全局CORS配置

可以在Spring Boot应用中添加全局CORS配置。这通常通过实现WebMvcConfigurer接口完成。

 @Configuration
 public class WebConfig implements WebMvcConfigurer {
 
     @Override
     public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/**")  // 对所有路径应用CORS配置
            .allowedOrigins("http://example.com")
            .allowedMethods("GET", "POST", "PUT", "DELETE")
            .allowedHeaders("Header1", "Header2", "Header3")
            .exposedHeaders("Header1", "Header2")
            .allowCredentials(true).maxAge(3600);
    }
 }

3. 使用 CorsFilter

除了使用@CrossOrigin和全局配置,还可以通过自定义CorsFilter来解决跨域问题。

 @Configuration
 public class MyConfiguration {
 
     @Bean
     public CorsFilter corsFilter() {
         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
         CorsConfiguration config = new CorsConfiguration();
         config.addAllowedOrigin("http://example.com");
         config.addAllowedHeader("*");
         config.addAllowedMethod("*");
         source.registerCorsConfiguration("/**", config);
         return new CorsFilter(source);
    }
 }

4. 使用 @ControllerAdvice@ModelAttribute

在某些情况下,你也可以使用@ControllerAdvice@ModelAttribute来全局处理请求和响应,从而手动设置CORS相关的HTTP头。

 @ControllerAdvice
 public class GlobalAdvice {
 
     @ModelAttribute
     public void setCORSHeaders(HttpServletResponse response) {
         response.setHeader("Access-Control-Allow-Origin""http://example.com");
         // 其他CORS相关设置
    }
 }


SpringBoot 如何解决跨域问题?的评论 (共 条)

分享到微博请遵守国家法律