Spring MVC 4.2+ CORS返回403
问题内容:
我创建了一个新鲜而简单的Spring MVC应用程序(使用4.2.1.Release,现在切换到4.2.7.Release)。该应用程序很简单:
WEB.XML:
<servlet>
<servlet-name>proxy</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:my-cool-context.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>proxy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
内容:
<context:component-scan base-package="my.supercool.company.app"/>
<mvc:cors>
<mvc:mapping path="/**" allowed-methods="POST, OPTIONS" />
</mvc:cors>
和控制器
@Controller
@RequestMapping("/")
@CrossOrigin
public class MySupercoolController {
@CrossOrigin
@RequestMapping(path="test", method = RequestMethod.POST)
@ResponseBody
private ResponseEntity<String> executePostProxy(HttpServletRequest request){
return new ResponseEntity<String>("TEST", HttpStatus.OK);
}
}
现在-控制器本身正在工作并返回我的文本,因此控制器已加载到上下文中。但是该端点的preflightRequest收到403
Forbidden响应,并且未设置CORS响应提示符。我正在使用JBOSS,但是我已经验证了OPTIONS请求是否到达了Spring(正在执行FrameworkServlet
doOptions方法,通过调试器进行检查)。在Spring MVC中,我还需要为CORS配置其他功能吗?
顺便说一句,上下文CORS配置和注释配置-我试图使其工作,所以我尝试使用xml,注释和两者。
问题答案:
看来,这也是必要的:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}