1. 程式人生 > >Java 跨域問題一站式解決方案

Java 跨域問題一站式解決方案

    在web專案開發中,經常會遇到跨域的問題(何為跨域這裡就不做解釋了),百度搜索也有不少的解決方案(部分過於繁瑣,未用到)。這裡將自己的處理方式和大家分享下,希望能幫到大家。

    (1)js端處理:通常是以ajax的方式,以下是處理程式碼

$.ajax({
   type: "GET",
   url: 'common/goBD.do',
   xhrFields: {withCredentials: true },
   crossDomain: true,
   success: function(data){
        window.open("http://www.baidu.com");
   }
});

        這裡主要注意下該程式碼:xhrFields: {withCredentials: true },不可缺少;url是訪問服務端地址,成功返回後跳轉百度頁面(新開啟tab頁,當然也可以在原有的頁面上開啟)。

    (2)服務端處理:通過設定response頭部資訊的方式,以下是處理程式碼

@RequestMapping(value="/goBD")
public void goOA(HttpServletResponse response,HttpServletRequest request) throws IOException{
    String msg = "";
    String result = "{\"msg\":"+msg+"}";
    PrintWriter out = response.getWriter();
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "0");
    response.setCharacterEncoding("utf-8");
    out = response.getWriter();
    out.write(result);
    out.flush();
    out.close();
}

    這裡只是簡單的處理了下response頭部資訊,並沒有加入其他的,若有其他的判斷如登入時可在js端帶入使用者名稱、密碼進行判斷處理,通過返回值在前端做出不同的處理。

    好了,上面是對不復雜,只是簡單的跨域跳轉的處理,很方便實