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


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


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


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

今天这里介绍一下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>


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



  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值