HTTP 기본 인증(Basic Authentication)의 JAVA 인 스 턴 스 코드

3769 단어 httpbasic인증자바
모두 가 사이트 에 접속 할 때,대부분 은 하나의 양식 을 통 해 로그 인 정 보 를 제출한다.
그러나 브 라 우 저 에서 로그 인 인증 대화 상 자 를 팝 업 할 때 가 있 습 니 다.다음 그림 은 HTTP 기본 인증 을 사용 하 는 것 입 니 다.

다음은 이 인증 작업 과정 을 살 펴 보 겠 습 니 다.
첫 번 째 단계:클 라 이언 트 가 http request 를 서버 에 보 내 고 서버 는 이 사용자 가 로그 인 인증 을 했 는 지 검증 합 니 다.없 으 면...
서버 는 클 라 이언 트 에 401 Unauthorzied 를 되 돌려 주 고 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);
  }

}
리퀘스트 가 처음 서버 에 도 착 했 을 때 서버 에 인 증 된 정보 가 없 으 면 서버 는 401 Unauthorzied 를 클 라 이언 트 에 게 되 돌려 줍 니 다.
인증 후 인증 정 보 를 session 에 두 고 이후 session 유효기간 내 에 인증 하지 않 아 도 됩 니 다.
다음은 여러분 께 가 져 온 HTTP 기본 인증(Basic Authentication)의 JAVA 인 스 턴 스 코드 의 모든 내용 입 니 다.많은 사랑 부 탁 드 리 겠 습 니 다~

좋은 웹페이지 즐겨찾기