欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一.BASIC認(rèn)證概述

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

二.BASIC認(rèn)證的過程

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

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

2.服務(wù)器向客戶端發(fā)送驗(yàn)證請(qǐng)求代碼401,服務(wù)器返回的數(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.當(dāng)符合http1.0或1.1規(guī)范的客戶端(如IE,F(xiàn)IREFOX)收到401返回值時(shí),將自動(dòng)彈出一個(gè)登錄窗口,要求用戶輸入用戶名和密碼。

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

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

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

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

三.BASIC認(rèn)證的缺點(diǎn)

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

四.BASIC認(rèn)證的JAVA實(shí)現(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=\"請(qǐng)輸入管理員密碼\"");
          out.print("對(duì)不起你沒有權(quán)限??!");
          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=\"請(qǐng)輸入管理員密碼\"");
          out.print("對(duì)不起你沒有權(quán)限!!");
          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=\"請(qǐng)輸入管理員密碼\"");
          out.print("對(duì)不起你沒有權(quán)限?。?);
          return;
        }
       }catch(Exception ex){
        ex.printStackTrace();
       }
     }else{
       RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");
       dispatcher.forward(request,response);
}

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

相關(guān)文章

  • Javaweb El表達(dá)式實(shí)例詳解

    Javaweb El表達(dá)式實(shí)例詳解

    EL全稱 Expression Language(表達(dá)式語言),這篇文章主要介紹了Javaweb El表達(dá)式實(shí)例詳解的相關(guān)資料,非常具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • Mybatis實(shí)現(xiàn)傳入多個(gè)參數(shù)的四種方法詳細(xì)講解

    Mybatis實(shí)現(xiàn)傳入多個(gè)參數(shù)的四種方法詳細(xì)講解

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)傳入多個(gè)參數(shù)的四種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Springboot添加jvm監(jiān)控實(shí)現(xiàn)數(shù)據(jù)可視化

    Springboot添加jvm監(jiān)控實(shí)現(xiàn)數(shù)據(jù)可視化

    這篇文章主要介紹了Springboot添加jvm監(jiān)控實(shí)現(xiàn)數(shù)據(jù)可視化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • SpringAop中AspectJ框架的切入點(diǎn)表達(dá)式

    SpringAop中AspectJ框架的切入點(diǎn)表達(dá)式

    這篇文章主要介紹了SpringAop中AspectJ框架的切入點(diǎn)表達(dá)式,AspectJ是一個(gè)基于Java語言的AOP框架,Spring2.0以后新增了對(duì)AspectJ切點(diǎn)表達(dá)式支持,@AspectJ 是AspectJ1.5新增功能,通過JDK5注解技術(shù),允許直接在Bean類中定義切面,需要的朋友可以參考下
    2023-08-08
  • 簡(jiǎn)單了解java等待喚醒機(jī)制原理及使用

    簡(jiǎn)單了解java等待喚醒機(jī)制原理及使用

    這篇文章主要介紹了簡(jiǎn)單了解java等待喚醒機(jī)制原理及使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • JAVA用遞歸實(shí)現(xiàn)全排列算法的示例代碼

    JAVA用遞歸實(shí)現(xiàn)全排列算法的示例代碼

    這篇文章主要介紹了JAVA用遞歸實(shí)現(xiàn)全排列算法的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 淺談MyBatis-plus入門使用

    淺談MyBatis-plus入門使用

    這幾天本人了解到了MyBatis-plus,一個(gè) Mybatis 增強(qiáng)工具包.經(jīng)過一番研究,發(fā)現(xiàn)這玩意真的好用,不用寫任何 xml ,內(nèi)置通用的 Mapper,而且完全是面向?qū)ο缶幊?文檔給的示例代碼,跟之前用過的 sequelize (Node.js 的 ORM)非常像,因此本人也嘗試了一把, 需要的朋友可以參考下
    2021-05-05
  • 關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析

    這篇文章主要介紹了關(guān)于ScheduledThreadPoolExecutor不執(zhí)行的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java網(wǎng)絡(luò)編程之URL+URLconnection使用方法示例

    Java網(wǎng)絡(luò)編程之URL+URLconnection使用方法示例

    這篇文章主要介紹了Java網(wǎng)絡(luò)編程之URL+URLconnection使用方法示例,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • SpringBoot Test及注解的使用詳解

    SpringBoot Test及注解的使用詳解

    這篇文章主要介紹了SpringBoot Test及注解的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論