📜  spring security 启用全局 cors - Java (1)

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

Spring Security 启用全局 CORS

简介

CORS(跨域资源共享)是一种机制,用于允许一个网页从另一个域访问资源。在 Spring Security 中,我们可以通过启用全局 CORS 配置,使得我们的 Web 应用支持跨域访问。

实现步骤
1. 添加 CORS 支持

要在 Spring Security 中启用全局 CORS 支持,我们需要在 Spring Security 配置文件中添加以下代码:

@Configuration
public class WebConfig implements WebMvcConfigurer {
 
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods("*")
            .allowedHeaders("*")
            .allowCredentials(true)
            .maxAge(3600);
    }
}

这段代码将使得我们的应用支持跨域请求。其中,.allowedOrigins("*") 表示允许任何来源,.allowedMethods("*") 表示允许任何 HTTP 方法,.allowedHeaders("*") 表示允许任何 HTTP 头信息,.allowCredentials(true) 表示允许发送 cookies,.maxAge(3600) 表示进行预检请求的有效期为 1 小时。

2. 配置 Spring Security

接下来我们需要在 Spring Security 配置文件中添加以下代码:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable();
    }
}

这段代码启用了 Spring Security 的 CORS 支持,并且禁用了 CSRF(跨站请求伪造)防护,因为在跨域访问时 CSRF 防护会失效。

3. 测试跨域访问

最后我们可以用浏览器访问我们的应用,看看是不是已经支持跨域访问了。例如,我们可以在 JavaScript 中使用 fetch 发起跨域请求:

fetch('http://localhost:8080/api/test')
    .then(response => response.json())
    .then(data => console.log(data));

这段代码会发起一个 GET 请求,访问 http://localhost:8080/api/test 接口,并将返回的 JSON 数据打印到控制台中。如果能够正常打印输出,则说明我们的应用已经支持跨域访问了。

总结

通过启用全局 CORS 配置,我们可以使得我们的 Spring Security 应用支持跨域访问。在实现时,我们需要添加 CORS 支持,配置 Spring Security,以及进行测试,确保我们的应用能够正常处理跨域请求。