Open webplus opened 8 years ago
$.ajax({ url : 'http://remote.domain.com/corsrequest', //支持跨域发送cookies xhrFields: { withCredentials: true }, crossDomain: true, contentType: "application/json", ...
/** * Spring Controller中的方法: */ @RequestMapping(value = "/corsrequest") @ResponseBody public Map<String, Object> getUserBaseInfo(HttpServletResponse response) { if(request.getHeader("Origin").contains("woego.cn")) { response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); } response.setHeader("Access-Control-Allow-Credentials", "true"); ... }
如果使用了Nginx服务器那只需要如下配置,不需要在代码额外设置了 Access-Control-Allow-Origin: | // 授权的源控制 Access-Control-Max-Age: // 授权的时间 Access-Control-Allow-Credentials: true | false // 控制是否开启与Ajax的Cookie提交方式 Access-Control-Allow-Methods: [, ] // 允许请求的HTTP Method Access-Control-Allow-Headers: [, ]* // 控制哪些header能发送真正的请求
当允许跨域访问的接口较多时,在每个请求中都添加 Access-Control-Allow-Origin 显然是不合适的。对于比较原生的 Java web 应用,使用 Filter 是一个不错的选择。
NOTE:不同的框架,特别是支持REST的框架,大多提供了自己的跨域设置方式,如Spring4的Config等,可以优先从使用的框架中寻找支持。
Filter本身很简单,可以直接把上面两句设置 Header 的语句抽取出来写一个Filter。这里推荐一个 Tomcat 中的 Filter:org.apache.catalina.filters.CorsFilter。
引入 这个类在 Tomcat 的 catalina.jar 中,可以通过将 tomcat/lib 下的 jar 包引用到项目中的方式来使用。但如果你对项目的 jar 环境有’洁癖’, 也可以单独把 这个类的 SVN源码 拷贝到项目中,修改(删除)一下‘日志’和‘异常提示内容’的引用就可以运行在任何原生java web项目中了。
设置方法 在 web.xml 中设置Filter:
一点补充: Filter的 默认 设置包含了:
这里的 cors.allowed.origins 虽然是 ‘*’,但实现上已经被优化,不会与 credentials 冲突。
客户端
服务端JAVA
使用了Nginx服务器的情况
如果使用了Nginx服务器那只需要如下配置,不需要在代码额外设置了 Access-Control-Allow-Origin: | // 授权的源控制
Access-Control-Max-Age: // 授权的时间
Access-Control-Allow-Credentials: true | false // 控制是否开启与Ajax的Cookie提交方式
Access-Control-Allow-Methods: [, ] // 允许请求的HTTP Method
Access-Control-Allow-Headers: [, ]* // 控制哪些header能发送真正的请求
Java中使用跨域 Filter
当允许跨域访问的接口较多时,在每个请求中都添加 Access-Control-Allow-Origin 显然是不合适的。对于比较原生的 Java web 应用,使用 Filter 是一个不错的选择。
NOTE:不同的框架,特别是支持REST的框架,大多提供了自己的跨域设置方式,如Spring4的Config等,可以优先从使用的框架中寻找支持。
Filter本身很简单,可以直接把上面两句设置 Header 的语句抽取出来写一个Filter。这里推荐一个 Tomcat 中的 Filter:org.apache.catalina.filters.CorsFilter。
引入 这个类在 Tomcat 的 catalina.jar 中,可以通过将 tomcat/lib 下的 jar 包引用到项目中的方式来使用。但如果你对项目的 jar 环境有’洁癖’, 也可以单独把 这个类的 SVN源码 拷贝到项目中,修改(删除)一下‘日志’和‘异常提示内容’的引用就可以运行在任何原生java web项目中了。
设置方法 在 web.xml 中设置Filter:
一点补充: Filter的 默认 设置包含了:
这里的 cors.allowed.origins 虽然是 ‘*’,但实现上已经被优化,不会与 credentials 冲突。