基于CORS 为Jfainl实现跨域请求

(该方式存在session会在每次请求都创建的情况。因为最近在休假,故解决方案稍后在方步)

以下提供Ext、SenchaTouch解决方案:

在Ajax请求中添加

	withCredentials : true,
	useDefaultXhrHeader : false,

上述两个配置即可以完成session为空的bug。其他框架如Jquery应该大同小异。


请求资源跨域是目前普遍存在的问题,实现的方式也有很多:如JSONP 或CORS....

在WebApp日益风靡的时代,跨域已经不可避免。

以前在做跨域的时候采用JSONP的方式,但是该实现有弊端,如只提供get方式请求,get请求会导致什么问题 详情百度。

以前使用struts2的时候 ,对jsonp的请求还是比较方便的。只需要配置一个param就可以了。

但是学习了JFinal之后,已经深深的爱上它了。但是尝试跨域的时候 ,采用jsonp的方式总感觉别扭。

于是我找到了 CORS(请不要百度。百度出来的结果都是关于gps的)

下面是具体的与jfinal整合实现。

1.第一步:下载两个jar包。分别是:cors-filter-1.7.1.jar和java-property-utils-1.9.jar

2.第二步:修改项目的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>
注意:cors的拦截需要在jfinal的拦截之前。
最后。你可以使用原来的请求方式进行请求。 是不是很简单呢?

你可能感兴趣的:(基于CORS 为Jfainl实现跨域请求)