服务端解决跨域问题

Posted on 2018-01-17 19:55  我编程我快乐  阅读(402)  评论(0)    收藏  举报

现在很多开发的API都支持ajax直接请求,这样就会导致跨域的问题,解决跨域的问题一方面可以从前端,另一方面就是服务器端。 
既然是搞服务器端,做对外的API服务,当然是做到越简单越好,前端只需要傻傻的使用就好。

如何让服务器本身支持跨域请求呢?

 

创建一个Filter

package com.iot.common.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

/**
 * @ClassName: CORSFilter 
 * @Description: 支持跨域过滤器
 * @author ZhangYong
 * @date 2018年1月17日 下午6:31:21
 */
public class CORSFilter implements Filter{

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
	}

	@Override
	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");
            response.setHeader("Access-Control-Max-Age", "1800");
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
            response.setHeader("Access-Control-Allow-Credentials", "true");
            chain.doFilter(req, response);
	}

	@Override
	public void destroy() {
		
	}

}

  在web.xml文件中配置Filter

  <filter>
  	<filter-name>corsFilter</filter-name>
  	<filter-class>com.iot.common.filter.CORSFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>corsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  

需要注意的问题:

当前台设置了 withCredentials = true ,那么后台Access-Control-Allow-Origin 为 *不可用,二者不能同时使用

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3