CORS 头缺少 'Access-Control-Allow-Origin'


转至元数据起始

目的

在测试环境中进行联调时可能会涉及前端跨域访问后台api的问题,本文档旨在给出此问题的解决方式。

只需三步轻松搞定。

添加MAVEN依赖

使用jetty-servlet包,注意要7.1版本以后,可以直接加入依赖。

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>8.1.16.v20140903</version>
</dependency>

 

修改Web.xml

在项目的web.xml中增加如下内容:

<!--crossoriginfilter-->
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

增加Filter

在每一个返回的http报文头中增加如下参数:

(1)Access-Control-Allow-Origin:*

(2)Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept

此外,还可以新建一个Filter统一来处理:

推荐新建如下Filter,注意在doFilter中增加响应报文的头,

@Component("accessControllAllowFilter")
public class AccessControllAllowFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
//To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
httpResponse.addHeader("Access-Control-Allow-Origin", "*");
httpResponse.addHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");
filterChain.doFilter(servletRequest, servletResponse);
//To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void destroy() {
//To change body of implemented methods use File | Settings | File Templates.
}
}

之后在web.xml中进行配置:

<filter>
<filter-name>accessControllAllowFilter</filter-name>
<filter-class>com.test.AccessControllAllowFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>accessControllAllowFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

以上三步应该就可以解决问题了。

最后,线上环境应该是不需要配置跨域的,因此,推荐使用autoconfig,把web.xml加入到模板中。线上与线下环境分开发布。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值