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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM