1. 程式人生 > >【解決辦法】JAVA服務端解決跨域問題 CORS請求頭方式

【解決辦法】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是否有加全,通過以上方法就可以實現跨域了。

如有不足,歡迎討論。