📜  如何在 Spring Boot 中禁用 Cors - Java (1)

📅  最后修改于: 2023-12-03 14:52:34.586000             🧑  作者: Mango

如何在 Spring Boot 中禁用 Cors - Java

Cors (Cross-Origin Resource Sharing) 是浏览器实现的一种安全机制,可以限制客户端网页在浏览器向不同域的服务器发送请求时,对资源的访问。Spring Boot 中默认启用 Cors 设置,但是有些场景下需要禁用 Cors。下面我们将介绍如何在 Spring Boot 中禁用 Cors。

1. 禁用全局 Cors

WebMvcConfigurer 中注册 CorsFilter,并将 addCorsMappings() 方法中的访问控制配置设置为 *,即允许任意域名访问:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("*")
                .allowedOrigins("*")
                .allowedHeaders("*")
                .allowCredentials(true);
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(false);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

说明:

  • addMapping("/**"):允许任意请求路径;
  • allowedMethods("*"):允许所有请求方式,如 GETPOSTDELETE
  • allowedOrigins("*"):允许所有域名,可以通过 allowedOriginPatterns 方法设置指定的域名列表;
  • allowedHeaders("*"):允许所有请求头;
  • allowCredentials(true):允许跨域请求时携带 Cookie 等认证信息。
2. 禁用单个接口 Cors

在需要禁用 Cors 的接口上使用 @CrossOrigin 注解,并将 origins 属性设为 *,即允许任意域名访问:

@RestController
public class UserController {
    
    @GetMapping("/users")
    @CrossOrigin(origins = "*")
    public List<User> getUsers() {
        // ...
    }
    
}

说明:

  • @GetMapping("/users"):请求路径;
  • @CrossOrigin(origins = "*"):开启跨域请求,并允许任意域名访问,也可以通过 allowedOriginPatterns 属性设置指定的域名列表。
3. 总结

通过以上两种方式,可以在 Spring Boot 中禁用 Cors 设置,以满足特定的业务需求。