我想在Spring Boot 2中启用CORS。我这样做如下:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
在大多数请求中都可以正常工作,但是在某些特殊请求中,我需要设置Access-Control-Allow-Origin
头作为响应。 我该怎么做?
答案 0 :(得分:0)
有许多方法可以做到这一点,例如使用“过滤器”或“拦截器”或“方面”。如果您使用的是Spring 5,也可以使用WebFilter。
其中一种方法是通过拦截器。这是一个粗略的代码。
public class AccessControlInterceptor implements HandlerInterceptor {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if(somecondition) {
response.setHeader("Access-Control-Allow-Origin", "your_value");
}
}
}
并用这样的弹簧注册此拦截器
@Configuration
public class MyConfig extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new AccessControlInterceptor ()).addPathPatterns("/**");
}
}
答案 1 :(得分:0)
摘自Spring文档https://spring.io/guides/gs/rest-service-cors/
启用CORS 控制器方法CORS配置 为了使RESTful Web服务的响应中包含CORS访问控制标头,只需在处理程序方法中添加@CrossOrigin批注:
@RestController
public class GreetingController {
@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
System.out.println("==== in greeting ====");
return new Greeting(counter.incrementAndGet(),String.format(template, name));
}
此@CrossOrigin批注仅对此特定方法启用跨域请求。默认情况下,它允许使用所有来源,所有标头,@ RequestMapping批注中指定的HTTP方法以及30分钟的maxAge。您可以通过指定以下注释属性之一的值来自定义此行为:起点,方法,allowedHeaders,暴露的Headers,allowCredentials或maxAge。在此示例中,我们仅允许http://localhost:9000发送跨域请求。
也可以在控制器类级别添加此批注,以便在此类的所有处理程序方法上启用CORS。
答案 2 :(得分:0)
当前,您将Access-Control-Allow-Origin
设置为*
,这是一个通配符,并且匹配所有原点。
如果您的请求包含与凭证相关的数据,例如通过将XMLHttpRequest.withCredentials
设置为true
:
Access-Control-Allow-Origin
的值不能为*
需要附加值为Access-Control-Allow-Credentials
的附加响应标头true
。