Spring Security 에서 사용자 가 로그 인 을 어떻게 실현 하 는 지 설명 합 니 다.


1.머리말
Spring Security 실전 건어물 시 리 즈 를 읽 는 것 을 환영 합 니 다.Spring Security 안전 프레임 워 크 를 통합 할 때 우리 가 가장 먼저 처리 한 것 은 우리 프로젝트 의 실제 수요 에 따라 맞 춤 형 등록 로그 인,특히 Http 로그 인 인증 일 수 있 습 니 다.이전 관련 글 에 따 르 면 Http 로그 인 인증 은 필터 UsernamePassword AuthenticationFilter 에서 처 리 됩 니 다.우 리 는 이 필 터 를 분명하게 해야만 약간의 맞 춤 형 화 를 할 수 있다.오늘 우 리 는 그것 의 소스 코드 와 작업 절 차 를 간단하게 분석 할 것 이다.
2.UsernamePasswordAuthenticationFilter 소스 코드 분석
UsernamePassword AuthenticationFilter 는 Abstract AuthenticationProcessingFilter(별 문 분석)에 계승 되 었 습 니 다.로그 인 요청 을 차단 하고 계 정과 비밀 번 호 를 가 져 오 는 역할 을 합 니 다.그리고 계 정 비밀 번 호 를 인증 증명서 UsernamePassword AuthenticationToken 에 밀봉 한 다음 에 증 거 를 특정 설정 의 AuthenticationManager 에 넘 겨 인증 하 는 역할 을 합 니 다.소스 코드 분석 은 다음 과 같다.

public class UsernamePasswordAuthenticationFilter extends
  AbstractAuthenticationProcessingFilter {
 //       、   key
	public static final String SPRING_SECURITY_FORM_USERNAME_KEY = "username";
	public static final String SPRING_SECURITY_FORM_PASSWORD_KEY = "password";
 //        set    
	private String usernameParameter = SPRING_SECURITY_FORM_USERNAME_KEY;
	private String passwordParameter = SPRING_SECURITY_FORM_PASSWORD_KEY;
 //       POST   
	private boolean postOnly = true;
 
 //                      uri   /login      POST
 public UsernamePasswordAuthenticationFilter() {
  super(new AntPathRequestMatcher("/login", "POST"));
 }

 //       AbstractAuthenticationProcessingFilter               
 public Authentication attemptAuthentication(HttpServletRequest request,
   HttpServletResponse response) throws AuthenticationException {
  //          POST
  if (postOnly && !request.getMethod().equals("POST")) {
   throw new AuthenticationServiceException(
    "Authentication method not supported: " + request.getMethod());
  }
  
  //    HttpServletRequest         、  
  String username = obtainUsername(request);
  String password = obtainPassword(request);

  if (username == null) {
   username = "";
  }

  if (password == null) {
   password = "";
  }

  username = username.trim();

  //       、          Token   ,         ,            ,            
  UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
   username, password);

  //    HttpServletRequest        request.getRemoteAddr() request.getSession     Token 
  setDetails(request, authRequest);

  //            AuthenticationManager  Token      
  return this.getAuthenticationManager().authenticate(authRequest);
 }
 //                              ,                     get 
 @Nullable
 protected String obtainPassword(HttpServletRequest request) {
  return request.getParameter(passwordParameter);
 }

  //                             ,                     get 
 @Nullable
 protected String obtainUsername(HttpServletRequest request) {
  return request.getParameter(usernameParameter);
 }

 //                     
 protected void setDetails(HttpServletRequest request,
   UsernamePasswordAuthenticationToken authRequest) {
  authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
 }

 //        key
 public void setUsernameParameter(String usernameParameter) {
  Assert.hasText(usernameParameter, "Username parameter must not be empty or null");
  this.usernameParameter = usernameParameter;
 }

 //        key
 public void setPasswordParameter(String passwordParameter) {
  Assert.hasText(passwordParameter, "Password parameter must not be empty or null");
  this.passwordParameter = passwordParameter;
 }

 //            POST  
 public void setPostOnly(boolean postOnly) {
  this.postOnly = postOnly;
 }

 public final String getUsernameParameter() {
  return usernameParameter;
 }

 public final String getPasswordParameter() {
  return passwordParameter;
 }
}
절차 에 대한 이 해 를 강화 하기 위해 저 는 이 절차 에 대해 명확 한 설명 을 하기 위해 그림 을 그 렸 습 니 다.

3.우 리 는 무엇 을 맞 출 수 있 습 니까?
위의 절차 에 따라 우 리 는 UsernamePassword AuthenticationFilter 작업 절 차 를 이해 한 후에 이런 일 을 할 수 있 습 니 다.
로그 인 요청 URI 와 요청 방식 을 설정 합 니 다.
로그 인 요청 매개 변수의 형식 을 맞 춤 화 합 니 다.예 를 들 어 JSON 형식 으로 제출 하거나 몇 가지 병존 할 수 있 습 니 다.
어떻게 사용자 이름과 비밀 번 호 를 증빙서류 UsernamePassword AuthenticationToken 에 봉 하여 업무 장면 에 필요 한 특수 증 거 를 맞 춥 니까?
4.우 리 는 어떤 의문 이 있 을 까?
AuthenticationManager 는 어디에서 왔 습 니까?그것 은 무엇 입 니까?증 거 를 어떻게 인증 하 는 지,인증 성공 의 후속 디 테 일 은 무엇 입 니까?인증 실패 의 후속 디 테 일 은 무엇 입 니까?떠 나 지 말고 계속 주목 하 세 요.
Spring Security 에서 사용자 가 로그 인 을 어떻게 하 는 지 에 대한 이 글 은 여기까지 입 니 다.  사용자 가 로그 인 내용 을 실현 하려 면 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 저 희 를 많이 사랑 해 주세요!

좋은 웹페이지 즐겨찾기