【解决办法】JAVA服务端解决跨域问题 CORS请求头方式

最近与前端进行本地联调时,发生了跨域的问题,无法访问我的服务端地址,使用了以下的方式进行了解决。

解决的办法是通过fileter中写入ACCESS-Control-Allow的头信息,进行跨域访问,代码如下:

public class CrossDomainFilter implements Filter{
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {    
        //设置跨域请求  
        HttpServletResponse response = (HttpServletResponse) res; 
        //此处ip地址为需要访问服务器的ip及端口号
        response.setHeader("Access-Control-Allow-Origin", "http://192.168.1.1:8080");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type,Token,Accept, Connection, User-Agent, Cookie");
        response.setHeader("Access-Control-Max-Age", "3628800");   
  
        System.out.println("设置跨域请求");  
        chain.doFilter(req, response);    
    }

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
	}
}

其中

"Access-Control-Allow-Origin"表示的是访问服务端的ip地址及端口号,也可以设置为*表示所有域都可以通过;

"Access-Control-Allow-Credentials"表示的是跨域的ajax中可以携带cookie,此时第一项设置不能为*,需指定域名;

"Access-Control-Allow-Methods"表示的是允许跨域的请求方法;

"Access-Control-Allow-Headers"表示的是允许跨域请求包含content-type头;

"Access-Control-Allow-Max-Age"表示的是在3628800秒内,不需要再发送预检验请求,可以缓存该结果,一般默认。

写完filter别忘记配置web.xml,其代码如下:

 	<!-- 跨域设置 -->
	<filter>
		<filter-name>crossFilter</filter-name>
		<filter-class>com.chinamobile.bcop.console.security.filter.CrossDomainFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>crossFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

在调试的过程中,如果出现错误,可以看看自己的Access-Control-Allow-Headers是否有加全,通过以上方法就可以实现跨域了。

如有不足,欢迎讨论。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值