在项目中前端和后端独自开发的时候、因为要联合调试项目、但是每端又根据环境需要才能运行时、会造成项目不在同一个服务器下、访问间会造成跨域访问问题
参考网上资料及自身实践中遇到的问题及最后成功解决现总结一下方便自己也方便别人:
查阅资料加自己总结发现可以有三种方法来解决跨域问题:
1、Tomcat自带的过滤器
优点:利用Tomcat过滤器能统一解决该应用服务器下的所有项目的跨域问题。
缺点:不够灵活、大包圆解决
2、第三方的常用工具包过滤器
优点:只针对需要解决跨域应用的项目解决不涉及其他、不用过多造成不必要的过滤器
3、Spring Mvc4.2及以上的注解
Tomcat自带的过滤器:
在在Tomcat服务器下conf/web.xml中添加filter配置如下:
<filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> <init-param> <param-name>cors.allowed.origins</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> </init-param> <init-param> <param-name>cors.allowed.headers</param-name> <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> </init-param> <init-param> <param-name>cors.exposed.headers</param-name> <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> </init-param> <init-param> <param-name>cors.support.credentials</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>cors.preflight.maxage</param-name> <param-value>10</param-value> </init-param> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
第三方的常用工具包过滤器:
下载第三方下面两个jar
cors-filter-1.7.jar、java-property-utils-1.9.jar导入自己工程项目中或者可以在http://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter 选择某个版本加入pom.xml中
在自己工程的web.xml中增加如下过滤器:
<filter> <filter-name>CORS</filter-name> <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> <init-param> <param-name>cors.allowOrigin</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.supportedMethods</param-name> <param-value>GET, POST, HEAD, PUT, DELETE</param-value> </init-param> <init-param> <param-name>cors.supportedHeaders</param-name> <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value> </init-param> <init-param> <param-name>cors.exposedHeaders</param-name> <param-value>Set-Cookie</param-value> </init-param> <init-param> <param-name>cors.supportsCredentials</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CORS</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Spring Mvc4.2以上
在springmvc中增加如下配置
<mvc:cors>
<mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET,POST,OPTIONS"/>
</mvc:cors>
在java文件中利用注解
@CrossOrigin
参考文章:
https://www.cnblogs.com/chiyouguli/p/4283349.html
https://blog.csdn.net/qq_24459481/article/details/77124541
https://blog.csdn.net/u013803262/article/details/54982722