Spring Boot 공부 일기 <22> - UserDetails , HandlerMethodArgumentResolver

이동휘·2024년 9월 21일

Spring Boot

목록 보기
21/21

1. IDE

Intellij

2. 오늘 공부 내용

UserDetails , HandlerMethodArgumentResolver

UserDetails

  • 역할: UserDetailsSpring Security에서 사용자 정보를 나타내는 인터페이스입니다. 주로 인증(Authentication)을 처리할 때 사용되며, 사용자 이름, 비밀번호, 권한(roles) 등의 정보를 제공합니다.
  • 위치: Spring Security 내에서 인증(Authentication) 처리 과정에서 사용됩니다.
  • 주요 메서드:
    • getUsername(): 사용자 이름을 반환
    • getPassword(): 사용자의 비밀번호(보통 암호화된 형태)를 반환
    • getAuthorities(): 사용자의 권한을 반환
    • isAccountNonExpired(), isAccountNonLocked(), isCredentialsNonExpired(), isEnabled(): 계정 상태를 나타내는 메서드들
  • Spring Security는 UserDetailsService를 통해 UserDetails 객체를 반환받고, 이를 기반으로 사용자를 인증
  • 요약: UserDetails는 사용자 정보를 포함한 인증 관련 객체이며, Spring Security가 사용자 인증을 처리할 때 사용합니다.

HandlerMethodArgumentResolver

  • 역할: HandlerMethodArgumentResolverSpring MVC에서 컨트롤러 메서드의 파라미터를 자동으로 주입하는 역할을 담당하는 인터페이스입니다. 클라이언트 요청에서 전달된 데이터를 적절한 타입으로 변환해 컨트롤러 메서드의 매개변수로 전달합니다.
  • 위치: Spring MVC에서 요청(Request) 처리 과정 중에 사용되며, 클라이언트로부터 받은 HTTP 요청의 파라미터를 컨트롤러에 전달할 때 사용됩니다.
  • 주요 메서드:
    • supportsParameter(MethodParameter parameter): 해당 파라미터가 처리 가능한지 여부를 확인
    • resolveArgument(...): 실제로 파라미터를 변환하고 전달하는 메서드
  • 요약: HandlerMethodArgumentResolver는 Spring MVC에서 클라이언트의 요청 데이터를 적절한 형식으로 변환해 컨트롤러 메서드의 파라미터에 전달하는 역할을 합니다.

차이점 요약

특징UserDetailsHandlerMethodArgumentResolver
역할Spring Security에서 사용자 인증 정보를 관리Spring MVC에서 요청 데이터를 컨트롤러 메서드 파라미터로 전달
주요 위치인증(Authentication) 처리 과정요청(Request) 처리 과정
적용 범위사용자의 인증 정보(이름, 비밀번호, 권한 등) 관리요청 파라미터를 컨트롤러에 전달
사용 영역Spring Security (보안)Spring MVC (웹 요청 처리)
주요 메서드getUsername(), getPassword(), getAuthorities()supportsParameter(), resolveArgument()

UserDetails는 보안(인증/인가)에 관련된 사용자 정보 처리를 담당하고, HandlerMethodArgumentResolver는 HTTP 요청에서 데이터를 컨트롤러로 전달하는 데 사용

같이 사용하는 경우

  • 사용자 인증 정보컨트롤러 메서드로 쉽게 전달하기 위해 발생
  • UserDetails는 Spring Security에서 사용자를 인증할 때 활용되지만, 컨트롤러 메서드에서 로그인된 사용자의 정보를 쉽게 접근할 수 있게 하려면 HandlerMethodArgumentResolver를 사용해 UserDetails 객체를 파라미터로 주입받을 수 있도록 처리
  • 순서
    1. UserDetails를 통한 인증
    2. HandlerMethodArgumentResolver로 컨트롤러에 사용자 정보 전달
    3. HandlerMethodArgumentResolver 등록
    4. 컨트롤러에서 사용
  • 이점
    • 코드 간결성: 컨트롤러 메서드에서 *SecurityContextHolder를 사용해 매번 사용자 정보를 직접 가져오지 않아도 됩니다.
    • 유지보수성: 모든 컨트롤러 메서드에서 동일한 방식으로 사용자 정보를 처리할 수 있어 일관된 코드 유지가 가능합니다.
    • 자동 바인딩: Spring MVC의 HandlerMethodArgumentResolver 덕분에, 인증된 사용자 정보를 메서드에 자동으로 주입받을 수 있습니다.

0개의 댓글