현재 프로젝트에서는 아래와 같이 각 컨트롤러 메서드에서 HttpSession
을 직접 호출하여 로그인 정보를 가져오고 있다.
@PostMapping("/signup/complete")
public String completeSignUp(Model model, @ModelAttribute AdditionalInfoRequestDto requestDto){
// 1. 세션에서 소셜 로그인 정보 가져오기
OAuthAttributes socialAttributes = (OAuthAttributes) httpSession.getAttribute("social_info");
이러한 방식은 다른 컨트롤러나 메서드에서도 동일하게 반복된다.
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {
//HttpSession에서 가져올 속성(attribute)의 키 값을 지정한다.
@NotNull
String value();
}
Target(ElementType.PARAMETER)
이 코드는 @LoginUser
에노테이션을 붙일 수 있는 위치를 지정한다.
@Target
: 어노테이션의 적용 대상을 설정하는 메타 에노테이션이다.ElementType.PARAMETER
: 메서드나 생성자의 파라미터에만 애노테이션을 사용할 수 있음을 의미한다.@Retention(RetentionPolicy.RUNTIME)
이 코드는 에노테이션의 정보가 유지되는 기간을 지정한다.
@Retention
: 에노테이션의 생명 주기를 설정하는 메타 에노테이션이다.RetentionPolicy.RUNTIME
: 애플리케이션이 실행 중일 때(런타임)에도 애노테이션 정보를 JVM이 메모리에 저장해 놓는. 이를 통해 리플렉션 기술로 런타임에 에노테이션 정보를 조회할 수 있다.