背景

跨域产生的问题:AJAX 请求能发送,浏览器不接收响应。
解决ajax跨域请求,我们采取的方案:服务端支持CORS (ie8、ie9不支持,高级浏览器支持)
Spring mvc项目可使用<mvc:cors/> 在配置支持跨域

配置CorsFilter

在spring的xml配置文件中添加以下内容

    <mvc:cors>
        <mvc:mapping path="/**"
            allowed-origins="*"
            allowed-methods="POST, GET, PUT, DELETE, PATCH"
            allowed-headers="AppToken,TerminalType"
            allow-credentials="true"
            max-age="6000" />
    </mvc:cors>	


在咱自己的shop项目中使用 <mvc:cors>注意点

咱自己的shop项目,在web.xml中使用了登录过滤器(Filter),它并没有受spring的管理。

CORS的 OPTION 请求(预检请求( preflight request))有可能会被 登录过滤器(Filter)拦截,所以要在咱自己的 登录过滤器(Filter) com.sicheng.wap.filter.LoginFilterWX当中,放过OPTION 请求。代码如下图。



使用了 <mvc:cors>后,启动项目时报错


报错

cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘mvc:cors’.

引起原因:
我在spring-mvc.xml文件中添加了下列代码,出现的报错

<mvc:cors>
<mvc:mapping path="/**" />
</mvc:cors>

原因:

eclipse中xsd的验证问题Description Resource Path Location Type cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for
解决方法:
将spring-mvc.xml文件的xsi:schemaLocation中的
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
改为
http://www.springframework.org/schema/mvc/spring-mvc.xsd
即可,如下图: