📅  最后修改于: 2023-12-03 14:47:33.901000             🧑  作者: Mango
CORS(跨域资源共享)是一种机制,用于允许一个网页从另一个域访问资源。在 Spring Security 中,我们可以通过启用全局 CORS 配置,使得我们的 Web 应用支持跨域访问。
要在 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 小时。
接下来我们需要在 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 防护会失效。
最后我们可以用浏览器访问我们的应用,看看是不是已经支持跨域访问了。例如,我们可以在 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,以及进行测试,确保我们的应用能够正常处理跨域请求。