大家在登錄網站的時候,大部分時候是通過一個表單提交登錄信息。
但是有時候瀏覽器會彈出一個登錄驗證的對話框,如下圖,這就是使用HTTP基本認證。

下面來看看一看這個認證的工作過程:
第一步: 客戶端發送http request 給服務器,服務器驗證該用戶是否已經登錄驗證過了,如果沒有的話,
服務器會返回一個401 Unauthozied給客戶端,并且在Response 的 header "WWW-Authenticate" 中添加信息。
如下圖。


第三步: 服務器將Authorization header中的用戶名密碼取出,進行驗證, 如果驗證通過,將根據請求,發送資源給客戶端。
下面來看一個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第一次到達服務器時,服務器沒有認證的信息,服務器會返回一個401 Unauthozied給客戶端。
認證之后將認證信息放在session,以后在session有效期內就不用再認證了。
以上就是小編為大家帶來的HTTP基本認證(Basic Authentication)的JAVA實例代碼全部內容了,希望大家多多支持武林網~
新聞熱點
疑難解答