跨域訪問的問題解決

 

以前一直有個錯誤的理解,若是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

相關文章
相關標籤/搜索