背景
跨域产生的问题: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
即可,如下图: