1. 程式人生 > 實用技巧 >Java中設定多個Access-Control-Allow-Origin跨域訪問

Java中設定多個Access-Control-Allow-Origin跨域訪問

1、如果服務端是Java開發的,新增如下設定允許跨域即可,但是這樣做是允許所有域名都可以訪問,不夠安全。

response.setHeader("Access-Control-Allow-Origin","*");

2、為保證安全性,可以只新增部分域名允許訪問,新增位置可以在下面三處任選一個。

(1)可以在過濾器的filter的dofilter()方法種設定。

(2)可以在servlet的get或者post方法裡面設定。

(3)可以放在訪問的jsp頁面第一行。

3、在此用第一種方法,注意web.xml配置過濾器(filter)。

public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws
IOException, ServletException { // 將ServletResponse轉換為HttpServletResponse HttpServletResponse httpResponse = (HttpServletResponse) res; // 如果不是80埠,需要將埠加上,如果是叢集,則用Nginx的地址,同理不是80埠要加上埠 String [] allowDomain= {"http://www.baidu.com","http://123.456.789.10","http://123.16.12.23:8080"}; Set allowedOrigins
= new HashSet(Arrays.asList(allowDomain)); String originHeader=((HttpServletRequest) req).getHeader("Origin"); if (allowedOrigins.contains(originHeader)){ httpResponse.setHeader("Access-Control-Allow-Origin", originHeader); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setHeader(
"Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); httpResponse.setHeader("Access-Control-Max-Age", "3600"); httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token"); // 如果要把Cookie發到伺服器,需要指定Access-Control-Allow-Credentials欄位為true httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpResponse.setHeader("Access-Control-Expose-Headers", "*"); } chain.doFilter(req, res); }

4、以下是我本人親測。

轉 :https://blog.csdn.net/qq_32625839/article/details/81001125