jfinal集成cros跨域

代码:

拦截器代码:

@Override
	public void intercept(Invocation inv) {
		CrossOrigin cross = inv.getController().getClass().getAnnotation(CrossOrigin.class);
		if (cross != null) {
			handler(inv.getController().getResponse());
			inv.invoke();
			return;
		}
		cross = inv.getMethod().getAnnotation(CrossOrigin.class);
		if (cross != null) {
			handler(inv.getController().getResponse());
			inv.invoke();
			return;
		}
		inv.invoke();
	}

	private void handler(HttpServletResponse response) {
		response.setHeader("Access-Control-Allow-Origin", "*");
		response.setHeader("Access-Control-Allow-Methods", "POST, GET");
		response.setHeader("Access-Control-Max-Age", "3600");
		response.setHeader("Access-Control-Allow-Headers",
				"Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
	}

注解:

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CrossOrigin {

}

使用方式:

在config里面添加 拦截器

image.png

然后在需要使用的Controller上加上@CrossOrigin注解即可。

image.png

注意:即使同一个类上和方法上都加了跨域注解,但类优先。

评论区

JFinal

2018-07-20 17:58

感谢分享,赞一个

lry999

2018-12-05 14:50

crossorigin和getAnnotation报错怎么处理

caoxusheng

2018-12-05 16:20

@lry999 报什么错

冰小块

2019-03-14 17:34

@lry999 先创建注解文件CrossOrigin

郭浩伟

2019-03-22 10:27

我按文章所示配置之后启动项目报错

小船翻翻

2019-04-25 21:36

这个文件跨域上传会有 Posted content type isn't multipart/form-data问题。目前正在寻找解决方案

要输就输给追求

2019-04-26 16:05

public class CrossDomainInterceptor implements Interceptor {

public void intercept(Invocation inv) {
//AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
inv.getController().getResponse().addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS,DELETE,PUT");
inv.getController().getResponse().addHeader("Access-Control-Allow-Headers", "content-type,authorization");
inv.getController().getResponse().addHeader("Access-Control-Allow-Origin", "*");
inv.getController().getResponse().addHeader("Access-Control-Request-Headers", "authorization");
if(!"OPTIONS".equals(inv.getController().getRequest().getMethod())){
inv.invoke();
}else{
inv.getController().renderNull();
}
}

}

zz210891470

2019-06-20 09:27

如何处理OPTIONS 请求,每次发送真正的请求之前 都会先发送这个请求 导致 我文件上传不了,怎么把这个请求过滤掉

要东

2019-09-19 11:17

好用,大赞