본문 바로가기

SPRING/SpringSecurity

[스프링 시큐리티 완전 정복| 실전 프로젝트 | 회원 인증 시스템] 인증상세

 

 

WebAuthenticationDetails

 

 



WebAuthenticationDetails는 사용자가 제출한 인증 요청과 관련된 추가적인 세부 정보를 담고 있는 클래스다. 기본적으로 이 클래스는 HTTP 요청과 관련된 데이터를 캡처하고, 이를 인증 정보에 추가하는 역할을 한다.

대표적으로 캡처되는 정보는 아래와 같다:

  • Remote Address (원격 주소): 사용자의 IP 주소.
  • Session ID (세션 ID): 사용자가 현재 로그인한 세션의 ID.

이 클래스는 보안 정책에 따라 추가적인 인증 검증에 사용될 수 있다. 예를 들어, 특정 IP 주소에서의 로그인 시도를 차단하거나, 특정 세션 상태에 따라 인증 절차를 추가할 수 있다.

 

 

 

 


AuthenticationDetailsSource

 

 



AuthenticationDetailsSource는 인증 과정에서 추가적인 세부 정보를 생성하는 전략 인터페이스다. 기본적으로 인증이 발생할 때, AuthenticationDetailsSource가 Authentication 객체에 추가적인 인증 세부 정보를 채워주는 역할을 한다.

 

 

 


코드 설명

@Component
public class FormWebAuthenticationDetailsSource implements AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> {
    // @Component: 이 클래스를 Spring의 Bean으로 등록한다. Spring Security의 인증 과정에서 자동으로 사용될 수 있게 해준다.

    @Override
    public WebAuthenticationDetails buildDetails(HttpServletRequest request) {
        // @Override: AuthenticationDetailsSource 인터페이스의 buildDetails 메서드를 구현하고 있다.
        // HttpServletRequest 요청을 받아 해당 요청으로부터 인증 세부 정보를 생성하는 역할을 한다.
        
        return new FormAuthenticationDetails(request);
        // FormAuthenticationDetails 객체를 생성하여 반환한다.
        // FormAuthenticationDetails는 WebAuthenticationDetails를 확장한 커스텀 클래스일 것으로 보이며,
        // HttpServletRequest를 받아 추가적인 인증 정보를 담고 있을 수 있다.
    }
}

 

이 클래스는 기본적으로 HttpServletRequest에서 필요한 정보를 가져와서, 커스텀 인증 세부 정보(FormAuthenticationDetails) 객체를 생성하는 역할을 한다. 이로써 Spring Security가 인증을 처리할 때, 사용자 요청과 관련된 추가적인 정보를 사용할 수 있게 된다.

 

@Getter
public class FormAuthenticationDetails extends WebAuthenticationDetails {
    // @Getter: Lombok 라이브러리를 사용하여 secretKey 필드에 대한 getter 메서드를 자동으로 생성한다.
    // FormAuthenticationDetails 클래스는 WebAuthenticationDetails를 상속받아 확장된 인증 세부 정보를 처리한다.

    private final String secretKey;
    // secretKey 필드는 HttpServletRequest에서 전달된 "secret_key" 값을 저장한다.
    // final로 선언하여 생성 시에만 값을 설정하고, 이후 변경되지 않음을 보장한다.

    public FormAuthenticationDetails(HttpServletRequest request) {
        super(request);
        // 부모 클래스인 WebAuthenticationDetails의 생성자를 호출하여
        // HttpServletRequest를 기반으로 기본적인 인증 정보를 설정한다. (IP 주소, 세션 ID 등)

        this.secretKey = request.getParameter("secret_key");
        // HttpServletRequest로부터 "secret_key"라는 파라미터 값을 가져와 secretKey 필드에 저장한다.
        // 이를 통해 사용자가 로그인할 때 추가적인 정보(예: secret_key)를 인증 과정에서 사용할 수 있다.
    }
}

이 클래스는 Spring Security의 기본 인증 정보(WebAuthenticationDetails)에 추가적으로 secretKey라는 인증 정보를 포함하도록 확장한 클래스다. HttpServletRequest에서 secret_key 파라미터를 추출해 이를 저장하고, 인증 과정에서 사용할 수 있도록 한다.