java使用cors解决跨域问题,服务器端开发为语言为java

原创 2016年08月10日 16:31:34


前后端分离开发,各司其职,分工明确,加上现在大前端的发展的火热,所以分离开发必定是一个趋势,分离开发就一定会遇到跨域的问题。


还是之前的意见,个人认为最好的解决方案是通过服务器的反向代理来解决。


当然根据项目的具体,有些时候也会采取不同的解决方案,

今天这里介绍一下cors解决,这里是站在服务端的角度,讲解需要做的工作,服务端语言为java


<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.allowOrigin指的可以通过的ip,*代表所有,可以使用指定的ip,多个的话可以用逗号分隔,默认为*

cors.supportedMethods指的是请求方式 默认为*

cors.supportedHeaders请求支持的头信息,默认为*

cors.exposedHeaders暴露的头信息,默认的empy list

cors.supportsCredentials支持证书,默认为true

cors.maxAge 最大过期时间,默认为-1

cors.tagRequests 默认为false

cors.allowSubdomains允许子域 默认为false


具体可以查看com.thetransactioncompany.cors.CORSConfiguration这个类的源码


官网文档:

http://software.dzhuvinov.com/cors-filter-configuration.html




xml直接配置filter过滤器,对所有请求进行过滤,添加请求头,这里采用的是第三方jar包提供的过滤器,当然也可以自己开发,

这里提供一个简单的实现

@Component
public class SimpleCORSFilter implements Filter {
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    chain.doFilter(req, res);
  }
  public void init(FilterConfig filterConfig) {}
  public void destroy() {}
}

当然这里也可以用拦截器。


回到web.xml里面配置的filter,使用的jar的依赖为:

<!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>2.5</version>
</dependency>


也可以使用ebay提供,这个只有一个过滤器,资料还ting

<!-- https://mvnrepository.com/artifact/org.ebaysf.web/cors-filter -->
<dependency>
    <groupId>org.ebaysf.web</groupId>
    <artifactId>cors-filter</artifactId>
    <version>1.0.1</version>
</dependency>


没有具体对比两个的性能和稳定性,有兴趣可以去看一下



版权声明:本文为博主原创文章,未经博主允许不得转载。

Java之旅--跨域(CORS)

CORS全称:Cross-Origin Resource Sharing 在前后台分离的应用开发中,跨域是经常需要处理的场景。指的是访问不同域名的资源,对于静态资源的访问,比如CSS、GIF、Form...

CORS(跨域资源共享) 的配置

http://blog.csdn.net/ohyoyo2014/article/details/24863197 兼容情况: 各种新版本的ie10,firefox,op...
  • newjueqi
  • newjueqi
  • 2014年05月26日 10:23
  • 33584

java web项目使用CORS方法实现跨域请求方案

问题产生背景 需要实现这样一个需求,在当前站点中使用ajax发送一个请求到另一个站点获取数据。js中使用jquery的ajax如下: 1 2 3 4 5 6 7 8 9 10 ...

使用Filter为请求方法添加跨域支持

跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。这里有域名的不同,端口号的不同。 很多浏览器在发起...

解决跨域请求的filter

@Component public class SimpleCORSFilter implements Filter { private final RedisTemplate redisTemp...

cors java跨域解决方案

java跨域资源共享解决方案

Java Web应用中支持跨域请求

由于工程合作开发的需要,后台的应用要能支持跨域访问,但是在这个跨域访问“时好时坏”,我们这帮屌丝所知道的就是加上两个jar包,然后声明一下Filter,感觉很简单的有没有!!感觉自己很牛X有没有!!全...
  • lmy86263
  • lmy86263
  • 2016年06月21日 00:10
  • 11073

配置 cros Java 前后端分离跨域请求

跨域实现类 package com.sq.filter; import org.springframework.stereotype.Component; import javax.servle...

java 浅析跨域问题以及如何使用Cors解决前后端分离部署项目所遇到的跨域问题

随着时间的推移,前后端分离的开发形式越来越流行,使用的公司也越来越多。但是这种开发形式也会带来一个问题。那就是跨域问题。 什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策...

跨域CORS原理及调用具体示例

上篇博客介绍了JSONP原理,其不足,就是只能使用GET提交,若传输的数据量大,这个JSONP方式就歇菜了。那这篇博客就来介绍另一种跨域介绍方案—CORS。   相对JSONP,CORS支持POST...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java使用cors解决跨域问题,服务器端开发为语言为java
举报原因:
原因补充:

(最多只允许输入30个字)