赶紧百度一下,找到了两种解决方法,现在将这两种方法整合在一起。
1、是在pom.xml和web.xml中配置CORS进行解决。在这里直接把别人的链接copy过来了(该项目是基于maven项目):http://www.jfinal.com/share/260
需要注意一点是web.xml的配置必须要在jfinal的配置之前,pom.xml按照上面的链接直接加进去就可以了,下面我把web.xml的代码贴出来一下。
1<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 3 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 4 version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"> 5 6 <!-- cors --> 7 <filter> 8 <filter-name>CORS</filter-name> 9 <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 10 <init-param> 11 <param-name>cors.allowOrigin</param-name> 12 <param-value>*</param-value> 13 </init-param> 14 <init-param> 15 <param-name>cors.supportedMethods</param-name> 16 <param-value>GET, POST, HEAD, PUT, DELETE</param-value> 17 </init-param> 18 <init-param> 19 <param-name>cors.supportedHeaders</param-name> 20 <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value> 21 </init-param> 22 <init-param> 23 <param-name>cors.exposedHeaders</param-name> 24 <param-value>Set-Cookie</param-value> 25 </init-param> 26 <init-param> 27 <param-name>cors.supportsCredentials</param-name> 28 <param-value>true</param-value> 29 </init-param> 30 </filter> 31 <filter-mapping> 32 <filter-name>CORS</filter-name> 33 <url-pattern>/*</url-pattern> 34 </filter-mapping> 35 <!-- jfinal --> 36 <filter> 37 <filter-name>jfinal</filter-name> 38 <filter-class>com.jfinal.core.JFinalFilter</filter-class> 39 <init-param> 40 <param-name>configClass</param-name> 41 <param-value>com.ssc.MainConfig</param-value> 42 </init-param> 43 </filter> 44 <filter-mapping> 45 <filter-name>jfinal</filter-name> 46 <url-pattern>/*</url-pattern> 47 </filter-mapping></web-app>
2、直接增加一个路由级别的跨域拦截器,加在路由之前。拦截器中加入如下两行代码,然后再在路由器中加上该拦截器。该方法的原理就是每次请求controller之前都先进行设置跨域许可设定。还有一种jsonp的方式,这里就不说了,可以参考链接:https://my.oschina.net/aixiaohua/blog/662221
1/* 2 * 前端解决跨域问题 3 */ 4public class CorsInterceptor implements Interceptor { 5 6 @Override 7 public void intercept(Invocation inv) { 8 inv.getController().getResponse().addHeader("Access-Control-Allow-Origin", "*"); 9 inv.invoke(); 10 } 11 12}
至于跨域的原理,我个人的理解就是html5页面请求本地服务器不会发生跨域问题,当处于一种前后端分离开发时候,由于别人请求的是我台电脑(服务器)的数据,就会发生跨域问题。如果想更详尽的了解,大家可以自行百度。(本人没有深入了解,只是一些浅知拙见,如有误,请大神们不吝赐教。)