最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談HTTP使用BASIC認證的原理及實現(xiàn)方法

 更新時間:2016年11月11日 10:17:37   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談HTTP使用BASIC認證的原理及實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一.BASIC認證概述

在HTTP協(xié)議進行通信的過程中,HTTP協(xié)議定義了基本認證過程以允許HTTP服務器對WEB瀏覽器進行用戶身份證的方法,當一個客戶端向HTTP服務 器進行數(shù)據(jù)請求時,如果客戶端未被認證,則HTTP服務器將通過基本認證過程對客戶端的用戶名及密碼進行驗證,以決定用戶是否合法??蛻舳嗽诮邮盏紿TTP服務器的身份認證要求后,會提示用戶輸入用戶名及密碼,然后將用戶名及密碼以BASE64加密,加密后的密文將附加于請求信息中, 如當用戶名為anjuta,密碼為:123456時,客戶端將用戶名和密碼用“:”合并,并將合并后的字符串用BASE64加密為密文,并于每次請求數(shù)據(jù) 時,將密文附加于請求頭(Request Header)中。HTTP服務器在每次收到請求包后,根據(jù)協(xié)議取得客戶端附加的用戶信息(BASE64加密的用戶名和密碼),解開請求包,對用戶名及密碼進行驗證,如果用 戶名及密碼正確,則根據(jù)客戶端請求,返回客戶端所需要的數(shù)據(jù);否則,返回錯誤代碼或重新要求客戶端提供用戶名及密碼。

二.BASIC認證的過程

1.客戶端向服務器請求數(shù)據(jù),請求的內(nèi)容可能是一個網(wǎng)頁或者是一個其它的MIME類型,此時,假設客戶端尚未被驗證,則客戶端提供如下請求至服務器:

Get /index.html HTTP/1.0
Host:www.google.com

2.服務器向客戶端發(fā)送驗證請求代碼401,服務器返回的數(shù)據(jù)大抵如下:

HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm="google.com"
Content-Type: text/html
Content-Length: xxx

3.當符合http1.0或1.1規(guī)范的客戶端(如IE,F(xiàn)IREFOX)收到401返回值時,將自動彈出一個登錄窗口,要求用戶輸入用戶名和密碼。

4.用戶輸入用戶名和密碼后,將用戶名及密碼以BASE64加密方式加密,并將密文放入前一條請求信息中,則客戶端發(fā)送的第一條請求信息則變成如下內(nèi)容:

Get /index.html HTTP/1.0
Host:www.google.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx

注:xxxx....表示加密后的用戶名及密碼。

5.服務器收到上述請求信息后,將Authorization字段后的用戶信息取出、解密,將解密后的用戶名及密碼與用戶數(shù)據(jù)庫進行比較驗證,如用戶名及密碼正確,服務器則根據(jù)請求,將所請求資源發(fā)送給客戶端:

三.BASIC認證的缺點

HTTP基本認證的目標是提供簡單的用戶驗證功能,其認證過程簡單明了,適合于對安全性要求不高的系統(tǒng)或設備中,如大家所用路由器的配置頁面的認證,幾乎 都采取了這種方式。其缺點是沒有靈活可靠的認證策略,如無法提供域(domain或realm)認證功能,另外,BASE64的加密強度非常低,可以說僅 能防止sohu的搜索把它搜到了。當然,HTTP基本認證系統(tǒng)也可以與SSL或者Kerberos結合,實現(xiàn)安全性能較高(相對)的認證系統(tǒng)

四.BASIC認證的JAVA實現(xiàn)代碼

HttpSession session=request.getSession();
     String user=(String)session.getAttribute("user");
     String pass;
     if(user==null){
       try{
        response.setCharacterEncoding("GBK");
        PrintWriter ut=response.getWriter();
        String authorization=request.getHeader("authorization");
        if(authorization==null||authorization.equals("")){
          response.setStatus(401);
          response.setHeader("WWW-authenticate","Basic realm=\"請輸入管理員密碼\"");
          out.print("對不起你沒有權限??!");
          return;
        }
        String userAndPass=new String(new BASE64Decoder().decodeBuffer(authorization.split(" ")[1]));
        if(userAndPass.split(":").length<2){
          response.setStatus(401);
          response.setHeader("WWW-authenticate","Basic realm=\"請輸入管理員密碼\"");
          out.print("對不起你沒有權限??!");
          return;
        }
        user=userAndPass.split(":")[0];
        pass=userAndPass.split(":")[1];
        if(user.equals("111")&&pass.equals("111")){
          session.setAttribute("user",user);
          RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");
          dispatcher.forward(request,response);
        }else{
          response.setStatus(401);
          response.setHeader("WWW-authenticate","Basic realm=\"請輸入管理員密碼\"");
          out.print("對不起你沒有權限??!");
          return;
        }
       }catch(Exception ex){
        ex.printStackTrace();
       }
     }else{
       RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");
       dispatcher.forward(request,response);
}

以上就是小編為大家?guī)淼臏\談HTTP使用BASIC認證的原理及實現(xiàn)方法全部內(nèi)容了,希望大家多多支持腳本之家~

相關文章

  • Java ThreadLocal詳解_動力節(jié)點Java學院整理

    Java ThreadLocal詳解_動力節(jié)點Java學院整理

    ThreadLocal,很多地方叫做線程本地變量,也有些地方叫做線程本地存儲,本文會詳細的介紹一下,有興趣的可以了解一下
    2017-06-06
  • SpringBoot 統(tǒng)一功能處理方案

    SpringBoot 統(tǒng)一功能處理方案

    在我們進行項目編寫時,有時相同的一段代碼在不同的地方使用多次,對于這種情況,spring 幫我們實現(xiàn)了統(tǒng)一功能處理,下面介紹一些常用的統(tǒng)一功能處理,感興趣的朋友一起看看吧
    2025-04-04
  • 使用JAXBContext 設置xml節(jié)點屬性

    使用JAXBContext 設置xml節(jié)點屬性

    這篇文章主要介紹了使用JAXBContext 設置xml節(jié)點屬性的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot整合Redis哨兵模式的實現(xiàn)示例

    SpringBoot整合Redis哨兵模式的實現(xiàn)示例

    Redis哨兵模式是Redis高可用方案的一種實現(xiàn)方式,通過哨兵來自動實現(xiàn)故障轉移,從而保證高可用,本文主要介紹了SpringBoot整合Redis哨兵模式的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • java實現(xiàn)平面山脈模型

    java實現(xiàn)平面山脈模型

    這篇文章主要為大家詳細介紹了java實現(xiàn)平面山脈模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java實現(xiàn)SHA-256加密算法的完全解析

    Java實現(xiàn)SHA-256加密算法的完全解析

    SHA-256是一種散列(哈希)算法,用于將任意長度的數(shù)據(jù)映射為固定長度的散列值,以保證數(shù)據(jù)完整性。本文將為大家介紹一下SHA-256加密算法的原理與實現(xiàn),希望對大家有所幫助
    2023-02-02
  • MyBatis在SQL語句中如何獲取list的大小

    MyBatis在SQL語句中如何獲取list的大小

    這篇文章主要介紹了MyBatis在SQL語句中如何獲取list的大小問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring體系的各種啟動流程詳解

    Spring體系的各種啟動流程詳解

    這篇文章主要給大家介紹了關于Spring體系的各種啟動流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 深入解析StringBuffer和StringBuilder的區(qū)別

    深入解析StringBuffer和StringBuilder的區(qū)別

    以下是對java中StringBuffer與StringBuilder的區(qū)別進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • sqlserver的jdbc配置方法

    sqlserver的jdbc配置方法

    這篇文章主要介紹了sqlserver的jdbc配置方法,需要的朋友可以參考下
    2014-04-04

最新評論

海林市| 高碑店市| 阿拉善右旗| 酉阳| 老河口市| 聂荣县| 武清区| 乌拉特前旗| 洮南市| 营山县| 齐齐哈尔市| 秦安县| 噶尔县| 闽侯县| 嘉兴市| 巴中市| 宣汉县| 北宁市| 龙山县| 云南省| 芮城县| 双峰县| 屯留县| 天峻县| 阿巴嘎旗| 蒲江县| 英山县| 建平县| 额敏县| 祁门县| 江西省| 鄂托克旗| 阜新市| 凤冈县| 江孜县| 通道| 牙克石市| 石泉县| 砚山县| 崇明县| 和田市|