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 파라미터를 추출해 이를 저장하고, 인증 과정에서 사용할 수 있도록 한다.