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

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


第三步: 服務器將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第一次到達服務器時,服務器沒有認證的信息,服務器會返回一個401 Unauthozied給客戶端。
認證之后將認證信息放在session,以后在session有效期內就不用再認證了。
以上就是小編為大家?guī)淼腍TTP基本認證(Basic Authentication)的JAVA實例代碼全部內容了,希望大家多多支持腳本之家~
相關文章
java輕量級規(guī)則引擎easy-rules使用介紹
這篇文章主要介紹了java輕量級規(guī)則引擎easy-rules使用介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
詳解Spring-boot中讀取config配置文件的兩種方式
這篇文章主要介紹了詳解Spring-boot中讀取config配置文件的兩種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
線程池之newCachedThreadPool可緩存線程池的實例
這篇文章主要介紹了線程池之newCachedThreadPool可緩存線程池的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

