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

HTTP基本認證(Basic Authentication)的JAVA實例代碼

 更新時間:2016年11月11日 09:59:00   投稿:jingxian  
下面小編就為大家?guī)硪黄狧TTP基本認證(Basic Authentication)的JAVA實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

大家在登錄網(wǎng)站的時候,大部分時候是通過一個表單提交登錄信息。

但是有時候瀏覽器會彈出一個登錄驗證的對話框,如下圖,這就是使用HTTP基本認證。

下面來看看一看這個認證的工作過程:

第一步: 客戶端發(fā)送http request 給服務(wù)器,服務(wù)器驗證該用戶是否已經(jīng)登錄驗證過了,如果沒有的話,

服務(wù)器會返回一個401 Unauthozied給客戶端,并且在Response 的 header "WWW-Authenticate" 中添加信息。

如下圖。

第三步: 服務(wù)器將Authorization header中的用戶名密碼取出,進行驗證, 如果驗證通過,將根據(jù)請求,發(fā)送資源給客戶端。

下面來看一個JAVA的示例代碼

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sun.misc.BASE64Decoder;

public class HTTPAuthServlet extends HttpServlet {
  
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String sessionAuth = (String) request.getSession().getAttribute("auth");

    if (sessionAuth != null) {
      System.out.println("this is next step");
      nextStep(request, response);

    } else {

      if(!checkHeaderAuth(request, response)){
        response.setStatus(401);
        response.setHeader("Cache-Control", "no-store");
        response.setDateHeader("Expires", 0);
        response.setHeader("WWW-authenticate", "Basic Realm=\"test\"");
      }      

    }

  }

  private boolean checkHeaderAuth(HttpServletRequest request, HttpServletResponse response) throws IOException {

    String auth = request.getHeader("Authorization");
    System.out.println("auth encoded in base64 is " + getFromBASE64(auth));
    
    if ((auth != null) && (auth.length() > 6)) {
      auth = auth.substring(6, auth.length());

      String decodedAuth = getFromBASE64(auth);
      System.out.println("auth decoded from base64 is " + decodedAuth);

      request.getSession().setAttribute("auth", decodedAuth);
      return true;
    }else{
      return false;
    }

  }

  private String getFromBASE64(String s) {
    if (s == null)
      return null;
    BASE64Decoder decoder = new BASE64Decoder();
    try {
      byte[] b = decoder.decodeBuffer(s);
      return new String(b);
    } catch (Exception e) {
      return null;
    }
  }

  public void nextStep(HttpServletRequest request, HttpServletResponse response) throws IOException {
    PrintWriter pw = response.getWriter();
    pw.println("<html> next step, authentication is : " + request.getSession().getAttribute("auth") + "<br>");
    pw.println("<br></html>");
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    doGet(request, response);
  }

}

當request第一次到達服務(wù)器時,服務(wù)器沒有認證的信息,服務(wù)器會返回一個401 Unauthozied給客戶端。

認證之后將認證信息放在session,以后在session有效期內(nèi)就不用再認證了。

以上就是小編為大家?guī)淼腍TTP基本認證(Basic Authentication)的JAVA實例代碼全部內(nèi)容了,希望大家多多支持腳本之家~

相關(guān)文章

  • java中的三種取整函數(shù)總結(jié)

    java中的三種取整函數(shù)總結(jié)

    下面小編就為大家?guī)硪黄猨ava中的三種取整函數(shù)總結(jié)。希望對大家有所幫助。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-11-11
  • java輕量級規(guī)則引擎easy-rules使用介紹

    java輕量級規(guī)則引擎easy-rules使用介紹

    這篇文章主要介紹了java輕量級規(guī)則引擎easy-rules使用介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • java:程序包org.junit不存在解決辦法詳析

    java:程序包org.junit不存在解決辦法詳析

    這篇文章主要給大家介紹了關(guān)于java:程序包org.junit不存在解決辦法的相關(guān)資料,這個錯誤通常發(fā)生在使用JUnit測試時,因為缺少JUnit庫的依賴,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • java實現(xiàn)簡單掃雷游戲

    java實現(xiàn)簡單掃雷游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • java網(wǎng)絡(luò)編程之群聊功能

    java網(wǎng)絡(luò)編程之群聊功能

    這篇文章主要為大家詳細介紹了java網(wǎng)絡(luò)編程之群聊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java 無參數(shù)構(gòu)造函數(shù)的應用

    Java 無參數(shù)構(gòu)造函數(shù)的應用

    本篇文章主要介紹了Java 無參數(shù)構(gòu)造函數(shù)的應用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 詳解Spring-boot中讀取config配置文件的兩種方式

    詳解Spring-boot中讀取config配置文件的兩種方式

    這篇文章主要介紹了詳解Spring-boot中讀取config配置文件的兩種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • MyBatis CodeHelperPro激活方法詳細教程

    MyBatis CodeHelperPro激活方法詳細教程

    MyBatisCodeHelper-Pro是IDEA下的一個插件,功能類似mybatis plugin,今天小編給大家分享MyBatis CodeHelperPro激活方法,需要的朋友跟隨小編一起看看吧
    2021-07-07
  • Spring boot 打jar包分離lib的正確配置方式

    Spring boot 打jar包分離lib的正確配置方式

    spring boot打jar包分離lib后,配置文件的方式,在網(wǎng)上可以搜到很多答案,但是都不夠完善,今天小編給大家?guī)砹薙pring boot 打jar包分離lib的正確配置方式,感興趣的朋友一起看看吧
    2018-02-02
  • 線程池之newCachedThreadPool可緩存線程池的實例

    線程池之newCachedThreadPool可緩存線程池的實例

    這篇文章主要介紹了線程池之newCachedThreadPool可緩存線程池的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

察雅县| 金坛市| 朝阳市| 公安县| 永康市| 津南区| 仙游县| 咸丰县| 伽师县| 东宁县| 禄劝| 宝清县| 房产| 肥城市| 阿拉尔市| 宁波市| 哈巴河县| 镶黄旗| 靖江市| 井研县| 闻喜县| 新营市| 铜川市| 平远县| 太原市| 镇平县| 洮南市| 视频| 新乡市| 郧西县| 塔河县| 依安县| 开平市| 七台河市| 永安市| 塔城市| 邵武市| 屯留县| 兴义市| 裕民县| 车险|