- Spring MVC 마스터하기 52022년 06월 04일
- starryeye
- 작성자
- 2022.06.04.:04
본 포스팅은 Spring MVC 마스터하기 4와 Spring MVC 마스터하기 인터셉터 1에서 이어집니다.
잠깐 복습!
@RequestMapping 컨트롤러를 사용하면
핸들러 어댑터는 RequestMappingHandlerAdapter가 사용된다.
RequestMappingHandlerAdapter는 핸들러(컨트롤러)를 호출하기 위해
다양한 파라미터를 만들 필요가 있다.
이때, 컨트롤러에서 사용하는 파라미터를 만들어주기 위해
HandlerMethodArgumentResolver라는 인터페이스를 구현한 구현체들을 호출하여 해당 파라미터를 생성할 수 있다.
HandlerMethodArgumentResolver 를 직접 구현해보고 적용해보자..
이전에는 홈 화면을 보여줄때 로그인 여부를 체크하는 컨트롤러에서..
@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember
위와 같이 @SessionAttribute 어노테이션을 사용한 파라미터를 받았었다..
직접 만든 ArgumentResolver로 대체 해보자.
어노테이션 만들기
위와 같이 파라미터에서만 사용되는 어노테이션을 만들어준다.
@Retention(RetentionPolicy.RUNTIME) : 리플렉션을 활용 할 수 있도록 런타임까지 어노테이션 정보가 남아있음
ArgumentResolver 만들기
HandlerMethodArgumentResolver 인터페이스를 구현한다.
supportsParameter : RequestMappingHandlerAdapter가 호출하여해당 컨트롤러에 적용될 ArgumentResolver인지 알아내는 메서드이다.
-> parameter.hasParameterAnnotation(Login.class) 로 어댑터가 호출할 컨트롤러에 @Login 어노테이션이 적용되어있는지 알아본다.
-> Member.class.isAssignableFrom(parameter.getParameterType()) 으로 해당 파라미터 타입이 Member 타입인지 확인
-> 두 변수가 모두 참일 경우에 참으로 리턴한다.
resolveArgument : supportsParameter가 참이면 호출되어 해당 파라미터를 생성하여 반환해 준다.
-> NativeWebRequest에서 HttpServletRequest을 얻는다.
-> 얻어낸 HttpServletRequest로 세션을 얻는다.(없으면 null리턴)
-> 세션이 null이면 파라미터에 null을 넣어주고..
-> 세션이 있다면 세션 속성 중, LOGIN_MEMBER(key)의 value를 찾아 반환하여 파라미터에 채워주게 된다.
ArgumentResolver 등록하기
@Configuration 을 사용한 클래스에서 WebMvcConfigurer를 implements하여..
addArgumentResolvers 를 오버라이딩 한다.
구현한 LoginMemberArgumentResolver 클래스를 생성하여 스프링 컨테이너에 등록해준다.
컨트롤러 구현
@Login 어노테이션이 있으면 직접 만든 ArgumentResolver가 동작하여 자동으로 세션에 있는 로그인 회원을 찾아준다.
loginMember가 null 이라면 로그인이 되어있지 않은 상태이므로..
-> 일반 홈 화면을 보여준다.
loginMember가 null이 아니라면 로그인이 되어있는 상태이므로..
-> 로그인이 된 상태의 홈 화면을 보여준다.
'Spring > MVC' 카테고리의 다른 글
Spring MVC 마스터하기 예외처리 2 (0) 2022.06.11 Spring MVC 마스터하기 예외처리 1 (0) 2022.06.11 Spring MVC 마스터하기 인터셉터 1 (0) 2022.06.04 Spring MVC 마스터하기 필터 1 (0) 2022.06.03 Spring MVC 마스터하기 쿠키, 세션 4 (0) 2022.06.03 다음글이전글이전 글이 없습니다.댓글