seminar-2022
seminar-2022 copied to clipboard
ArgumentResolver에서 request에 지정한 attribute 꺼내오기
안녕하세요, 2차시 세션에서 설명이 제대로 이루어지지 않은 부분이 있었는데요!
저희가 package javax.servlet.http
안에 있는 HttpServletRequest를 사용해서 setAttribute 해주기 때문에, 어트리뷰트를 가져올 때도 이 객체로부터 정보를 얻어와야 합니다.
request.getAttribute() 메소드를 사용할 때, 스프링에 내장된 NativeWebRequest 타입의 getAttribute 메소드는 시그니처로 name뿐만 아니라 scope
를 받습니다. 스코프는 세션 레벨에서의 다양한 정보 저장을 위한 기능인데요,
아래처럼 NativeWebRequest
타입의 요청을 ServletWebRequest
라는 객체로 감싸주면 (어댑터 클래스입니다),
그 객체 내부에 있는 request 프로퍼티를 통해 인터셉터에서 가로챘던 HttpServletRequest 에 접근할 수 있습니다.
override fun resolveArgument(
parameter: MethodParameter,
mavContainer: ModelAndViewContainer?,
webRequest: NativeWebRequest,
binderFactory: WebDataBinderFactory?
): Any? {
parameter.hasMethodAnnotation(UserContext::class.java)
val password = (webRequest as ServletWebRequest).request.getAttribute("pwd")
return password
}