一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|

服務器之家 - 編程語言 - JAVA教程 - 淺談HTTP使用BASIC認證的原理及實現方法

淺談HTTP使用BASIC認證的原理及實現方法

2020-07-04 10:33java教程網 JAVA教程

下面小編就為大家帶來一篇淺談HTTP使用BASIC認證的原理及實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一.BASIC認證概述

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

二.BASIC認證的過程

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

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

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

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規范的客戶端(如IE,FIREFOX)收到401返回值時,將自動彈出一個登錄窗口,要求用戶輸入用戶名和密碼。

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

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

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

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

三.BASIC認證的缺點

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

四.BASIC認證的JAVA實現代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
}

以上就是小編為大家帶來的淺談HTTP使用BASIC認證的原理及實現方法全部內容了,希望大家多多支持服務器之家~

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产偷啪视频一区 | 免费一级特黄特色大片∵黄 | 国产高清免费在线 | 乌克兰13一14娇小 | 欧美日韩一二三区免费视频观看 | 地址二地址三2021变更 | 国内自拍网红在线综合 | aⅴ天堂小视频 | 麻豆夏晴子 | 我们中文在线观看免费完整版 | 国产成人一区二区三区视频免费蜜 | 日本国产一区二区三区 | 人人精品久久 | www.91在线播放 | 视频一区二区国产 | 国产伊人久久 | 精品无人区乱码1区2区3区免费 | 黑人巨茎大战欧美白妇 | 国产盗摄女厕美女嘘嘘 | 国产精品午夜性视频网站 | 潘甜甜在线观看 | 亚洲国产日韩欧美在线vip1区 | 国色天香社区视频免费高清在线观看 | 别停好爽好深好大好舒服视频 | 日本全黄三级在线观看 | futa巨大好爽好长 | 亚洲天堂成人在线 | 91香蕉国产在线观看免费永久 | 精品午夜中文字幕熟女人妻在线 | 午夜精品久久久久久 | 五月激激激综合网色播免费 | 激情综 | 青青草成人在线观看 | 精品免费久久久久久影院 | 久久精品动漫网一区二区 | 母乳在线| 日本在线观看www鲁啊鲁视频 | 色综合视频一区二区观看 | 国产精品午夜国产小视频 | 亚洲男人的天堂网站 | dasd817黑人在线播放 |