解決跨域session 同步問題


跨域來源:(前端站點和后端API布署到不同的站點)

 

解決方案

.服務端設置

1.配置允許跨域請求

public class BaseAction {
    /**
     * 支持跨域請求
     * @author fxd
     * @param response 
     * @since JDK 1.6
     */
    protected void crossComain(HttpServletRequest request,HttpServletResponse response){
        String[] allowDomains = {"http://www域名1","http://www域名2"};
        Set allowOrigins = new HashSet(Arrays.asList(allowDomains));
        String originHeads = request.getHeader("Origin");
        if(allowOrigins.contains(originHeads)){
            //配置跨域訪問的最簡單的方式是用通配符 * ,(就是不安全,所有的請求都能跨域)
            response.setHeader("Access-Control-Allow-Origin", originHeads);
            response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH");
            response.setHeader("Access-Control-Max-Age", "36000");
            response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization");
            response.setHeader("Access-Control-Allow-Credentials","true");//保持跨域 Ajax 時的 Cookie
        } 
    }
}

2.接口調用跨域方法

/**
 * 測試
 */
@Controller
public class Test extends BaseAction{

    @RequestMapping("Test")
    public void test(HttpServletRequest request,HttpServletResponse response){
        //調用允許跨域方法,此接口支持跨域請求
        crossComain(request, response);
        System.out.println("支持跨域請求");
    }
}

以上兩步就完成接口跨域請求了

 

二. 客戶端配置

1.因為在默認情況下,跨源請求不提供憑據(cookie、HTTP認證及客戶端SSL證明等)。通過將withCredentials屬性設置為true,可以指定某個請求應該發送憑據。如果服務器接收帶憑據的請求,會用下面的HTTP頭部來響應。


/**
 * ajax post 跨域 request
 * @param {Object} url 請求地址
 * @param {Object} data 請求參數
 * @param {Object} success 成功回調
 * @param {Object} async 是否同步 false:同步 ture:異步
 */
function ajax_cross(url,data,success,async){
    $.ajax({
        type:"post",
        url:url,
        async:async,
        data:data,
        dataType:"json",
        xhrFields:{
            withCredentials:true
        },
        crossDomain:true,
        success:success
    });
}

 

2.調用分裝好的ajax方法:如圖

 $(function(){
     Test();
 });
    
 //測試
  function Test(){
     //跨域請求
     ajax_cross("/Test",{},function success(result){
          console.log(result);
     },false);
  }

 


免責聲明!

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



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