一般解决js跨域问题大多使用jsonp和CROS解决,但由于jsonp采用get的方式,即使是用post,也会自动转为get,对传到服务器的字节数有一定限制,而且这种机制对安全性也存在一定隐患,因此我采用CROS解决,我由于最近做webapp的问题,前台采用angularjs +ionic,后台采用springmvc实现restful,在跨域解决方面,后台在web.xml里面引入filter,这个类采用jetty里面现成的类实现,只需要配置参数就可以了,代码如下:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,OPTIONS,DELETE,PUT</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在maven工程中映入对应的jar,重新打包后台就搞定了
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>9.0.0.RC2</version>
</dependency>
前台angularjs 需要在config里面增加两行代码
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
现在就可以跟后台交互了