具体来说,我希望整个控制者发送“Access-Control-Allow-Origin = *”。
我在下面试过,但这似乎不起作用:
@Controller
@RequestMapping(value = "/controller/base", headers="Access-Control-Allow-Origin=*")
public class UserController {
@RequestMapping(method = RequestMethod.GET, value = "/blah", produces = application/json")
@ResponseBody
public Map blah(/*...,*/ HttpServletResponse response, HttpServletRequest request) throws Exception {
//...
}
}
只有当我明确设置(在所有方法中)时才会起作用:
response.addHeader("Access-Control-Allow-Origin", "*");
以某种方式为一个地方的一个或多个控制器设置这个?
答案 0 :(得分:1)
据我所知,没有办法从控制器本身拦截控制器的所有方法(除了使用@InitBinder
之类的丑陋黑客)。
但是,您可以创建HandlerInterceptor
并将其应用于控制器的基本URL。例如,使用@EnableMvc
:
@Configuration
@EnableWebMvc
public class MyWebConfiguration extends WebMvcConfigurerAdapter {
...
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(...).addPathPatterns("/controller/base/**");
}
...
}
答案 1 :(得分:0)
考虑使用Spring 3.2中引入的@ControllerAdvice annotation,并结合@InitBinder。
“使用@ControllerAdvice注释的类可以包含@ ExceptionHandler,@ InitBinder和@ModelAttribute方法,这些方法将应用于跨控制器层次结构的@RequestMapping方法,而不是声明它们的控制器层次结构。@ ControllerAdvice是组件注释允许通过类路径扫描自动检测实现类。“
@InitBinder
注释的方法中设置响应标头。@ControllerAdvice
注释该类以使其全局处理@InitBinder。