Spring MVC 4.2+ CORS返回403

时间:2016-07-20 11:44:22

标签: java spring spring-mvc servlets cors

我创建了一个新的简单的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响应heaeders。我正在使用JBOSS,但我已经验证了OPTIONS请求到达Spring(正在执行FrameworkServlet doOptions方法,通过调试器检查)。在Spring MVC中我还应该为CORS配置什么吗?

顺便说一句 上下文CORS配置和Annotation配置 - 我试图让它工作,所以我尝试使用xml,注释和两者。

1 个答案:

答案 0 :(得分:2)

看来,这也是必要的:

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