-
Spring MVC - ArgumentResolver을 활용한 애노테이션 만들기Spring/Spring MVC 2022. 2. 9. 17:04728x90반응형
ArgumentResolver을 활용한 애노테이션 만들기
다음과 같은 핸들러가 있다
@GetMapping("/") public String homeLoginV3Spring( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { .... }
핸들러의 파라미터중 Member loginMember는 key 값으로 @SessionAttribute 어노테이션을 이용해 Session 영역에 저장되어있는 해당 Member타입의 객체를 가져온다. 잘못된 방법은 아니지만 위 방법보다 더 보기 간편하고 편리하게 사용할 수 있도록 @SessionAttribute의 모든 파라미터 설정값을 갖는 애노테이션을 만들어 사용할 수 있다.
애노테이션 생성
- @Target(ElementType.PARAMETER)
- 파라미터에만 사용 - @Retention(RetentionPolicy.RUNTIME)
- 리플렉션 등을 활용할 수 있도록 런타임까지 애노테이션 정보가 남아있음
@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface Login { }
HandlerMethodArgumentResolver 구현
@Slf4j public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { log.info("supportsParameter 실행"); boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class); boolean hasMemberType = Member.class.isAssignableFrom(parameter.getParameterType()); return hasLoginAnnotation && hasMemberType; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { log.info("resolveArgument 실행"); HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest(); HttpSession session = request.getSession(false); if (session == null) { return null; } return session.getAttribute(SessionConst.LOGIN_MEMBER); } }
▶ supportsParameter()
- @Login 애노테이션이 있으면서 Member 타입이면 해당 ArgumentResolver가 사용
▶ resolveArgument()
- 컨트롤러 호출 직전에 호출 되어서 필요한 파라미터 정보를 생성해준다.
- 세션에 있는 member 객체를 찾아서 반환728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 서블릿 예외(Exception) 에 따른 필터(Filter)와 인터셉터(Interceptor) 처리 (0) 2022.02.10 Spring MVC - 서블릿의 예외(Exception)에 따른 오류 페이지 등록(오류 페이지 작동 원리, 오류 페이지에서 오류 정보 이용하기) (0) 2022.02.10 Spring MVC - interceptor를 이용한 요청 로그 기록과 로그인 체크 (0) 2022.02.09 Spring MVC - Filter를 이용한 요청 로그 기록과 로그인 체크 (0) 2022.02.09 Spring MVC - Session을 이용한 로그인 처리 (HttpSession, @SessionAttribute), 세션 정보 조회 (0) 2022.02.08 - @Target(ElementType.PARAMETER)