跨域访问的问题解决

 

以前一直有个错误的理解,若是A服务器中有个ajax请求访问B服务器,是A服务器出于安全考虑,不让访问B服务器,真实状况是该ajax请求已经发送给B服务器了,B服务器出于安全考虑,没有给A服务器的ajax请求以返回。html

这种状况,能够在B服务器中添加过滤器来解决,具体代码以下。java

public class AccessControlFilter implements Filter {

	private final static Logger logger = LoggerFactory
			.getLogger(AccessControlFilter.class);

	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {

		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;

		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");

		String requestUri = request.getRequestURI();

		logger.info("AccessControlFilter.doFilter requestUri=[" + requestUri
				+ "]");
		System.out.println("AccessControlFilter.doFilter requestUri=[" + requestUri
				+ "]");
		

		System.out.println("AccessControlFilter.doFilter requestUri=[" + requestUri
				+ "] 进行跨域处理。");
		response.setHeader("Access-Control-Allow-Origin", "*");
		response.setHeader("Access-Control-Allow-Methods",
				"POST, GET");
		response.setHeader("Access-Control-Max-Age", "6000");
		response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

		chain.doFilter(req, res);

	}

	public void init(FilterConfig filterConfig) {

	}

	public void destroy() {

	}
}

可是这种处理方式也有弊端,B服务器的安全性大大下降。ajax

相关文章
相关标签/搜索