Spring MVC 4.2+ CORS 返回 403

Posted

技术标签:

【中文标题】Spring MVC 4.2+ CORS 返回 403【英文标题】:Spring MVC 4.2+ CORS returning 403 【发布时间】:2016-11-23 15:20:17 【问题描述】:

我创建了一个新的简单的 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、注释和两者。

【问题讨论】:

allowed-methods="GET, PUT"@RequestMapping(path="test", method = RequestMethod.POST) @zeroflagL 改变了它,没有帮助:( @zeroflagL 我还从 XML 中删除了 mvc:cors,只留下了注释。也没有帮助 【参考方案1】:

看来,这也是必要的:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter 
    @Override
    public void addCorsMappings(CorsRegistry registry) 
        registry.addMapping("/**");
    

【讨论】:

以上是关于Spring MVC 4.2+ CORS 返回 403的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 4.2 中启用 CORS 过滤器

使用 Spring MVC 为所有 API 启用 CORS

Spring Security 4.2 中的 StrictHttpFirewall 与 Spring MVC @MatrixVariable

❤️‍Spring全家桶从入门到大神--mvc 常见知识点

通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)

杰克逊 JSON、Spring MVC 4.2 和 Hibernate JPA 问题的无限递归