<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

        最近的項目中涉及到了應用ajax請求后臺系統(tǒng)登錄,身份認證失敗,經(jīng)過不斷的調(diào)試終于找到解決方案。

      應用場景:

        項目測試環(huán)境:前端應用HTML,js,jQuery ajax請求,部署在Apache服務器;后端業(yè)務系統(tǒng)應用spring mvc,mybatis,部署在tomcat服務器。當在一個系統(tǒng)需要調(diào)用另一個系統(tǒng)的時候,就會出現(xiàn)跨域的問題,即本次我們遇到了ajax請求的跨域問題。

        系統(tǒng)權限安全框架使用shiro,系統(tǒng)登錄時發(fā)送ajax請求調(diào)用springmvc action方法進行系統(tǒng)登錄及身份認證,角色權限授權等。由于ajax請求時,瀏覽器會認為攜帶Cookie是不安全請求,將限制其攜帶Cookie信息,導致登錄action方法無法獲取并響應相應的Cookie(JSESSIONID),身份認證及角色權限授權、退出等都操作都無法正常使用。

      解決方案:

        1、當發(fā)送ajax請求時,查看瀏覽器調(diào)試信息中Headers和Cookies,發(fā)現(xiàn)發(fā)送到后端的跨域請求并沒有攜帶 cookie 信息,可見Request Headers不包含Cookie屬性,Response Headers中也不包含Set-Cookie屬性,導致無法得到后臺業(yè)務系統(tǒng)的認證。

         

        解決:在ajax里添加withCredentials的配置,允許其請求攜帶cookie信息。通過設置withCredentials=true,發(fā)送Ajax時,Request header中便會帶上 Cookie 信息。

      $.ajax({
                  type: "post",
                  url:url,
                  async:false,
                  data:datatosend,
                  dataType:"json",
                  beforeSend: function(xhr) {
                      xhr.withCredentials = true;
                  }
                  crossDomain:true,
                  success: function (data) {
                      var a=JSON.stringify(data);
                      if(data.result==true){
                        ...........
                     }else{
                     ...........
                   }
                  },
                  error:function (data) {
                      var a=JSON.stringify(data);
                      alert(a);
                  }
              });                        

        注意:<踩過的坑>我們在beforeSend方法里設置withCredentials=true;在上述代碼情境下,如果使用xhrFields:{ withCredentials:true }方法,則允許攜帶cookie信息的配置并不生效。(原因:ajax中添加了async:false,即修改為同步了,在窗口上下文的同步模式中,已不再支持使用XMLHttpRequest的withCredentials屬性)。當保持異步模式時,我們可以更換對應的方法。注意2種方法的區(qū)分。

         2、服務器server端要配置Access-Control-Allow-Credentials

        我們在客戶端設置了withCredentials=true 參數(shù),對應著,服務器端要通過在響應 header 中設置Access-Control-Allow-Credentials = true來運行客戶端攜帶證書式的訪問。通過對Credentials參數(shù)的設置,就可以保持跨域Ajax時傳遞的Cookie。

      response.setHeader("Access-Control-Allow-Credentials", "true");

        3、服務器server端要配置Access-Control-Allow-Origin

        到以上配置為止,發(fā)送ajax請求,我們發(fā)現(xiàn)還會出現(xiàn)一個錯誤,提示我們 Access-Control-Allow-Origin 不能用 * 通配符。原因是:當服務器端 Access-Control-Allow-Credentials = true時,參數(shù)Access-Control-Allow-Origin 的值不能為 '*' 。

        我們重新設置Access-Control-Allow-Origin的值,當服務器端接收到請求后,在返回響應時,把請求的域Origin填寫到響應的Header信息里(即誰訪問我,我允許誰),代碼如下:

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

        ok,到目前問題搞定了,經(jīng)過測試,可成功傳遞及響應cookie信息,瀏覽器調(diào)試信息如下圖所示:

         

        

        

       

      posted on 2016-11-28 15:21  charlie_ai  閱讀(15333)  評論(4)    收藏  舉報

      主站蜘蛛池模板: 久久月本道色综合久久| 在线国产毛片| 亚洲av无码片在线播放| 国产精品一区二区久久岳| 私人毛片免费高清影视院| 成人免费A级毛片无码片2022| 337p粉嫩大胆噜噜噜| 精品无码三级在线观看视频| 九九热视频精选在线播放| 精品无码日韩国产不卡av| 国产免费无遮挡吸奶头视频| 亚洲精品国产一区二区三区在线观看 | 真实国产老熟女无套中出| 欧美深度肠交惨叫| 亚亚洲视频一区二区三区| 特级做a爰片毛片免费看无码| 免费无遮挡无码永久视频| 精品在免费线中文字幕久久| 秋霞在线观看秋| 熟女蜜臀av麻豆一区二区| 久久亚洲AV成人网站玖玖| 丝袜a∨在线一区二区三区不卡| 国产真实精品久久二三区| 欧美人成在线播放网站免费| 中文字幕成人精品久久不卡| 国产午夜亚洲精品福利| 国产精品一区二区国产馆| www内射国产在线观看| 日韩内射美女人妻一区二区三区| 国产盗摄xxxx视频xxxx| 久久久久免费看成人影片| 成人aⅴ综合视频国产| h动态图男女啪啪27报gif| 日韩一区二区三区精品| 免费看久久妇女高潮a| 熟女少妇精品一区二区| 日本中文字幕有码在线视频 | 又爽又黄又无遮掩的免费视频| 中文字幕日韩有码国产| 国产成人精品午夜在线观看| 亚洲乱妇熟女爽到高潮的片|