반응형
@Login 어노테이션을 만들고 이게 있으면 직접 만든 ArgumentResolver가 동작해서 자동으로 세션에 있는 로그인 회원을 찾아주고 없다면 null을 반환하도록 개발하는 실습을 진행했다.
@Target(ElementType.PARAMETER) //파라미터에만 사용
@Retention(RetentionPolicy.RUNTIME) //리플렉션 등 활용할 수 있게 런타임까지 어노테이션 정보가 남는다.
public @interface Login {
}
@Login 어노테이션을 생성해 주었다.
주석을 참고하면 된다.
@Slf4j
public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver {
HandlerMethodArgumentResolver을 구현하면 된다.
오버라이드를 활용해 아래와 같이 구성한다.
@Override
public boolean supportsParameter(MethodParameter parameter) {
log.info("supportsParameter 실행");
boolean hasLgoinAnnotation = parameter.hasParameterAnnotation(Login.class);
boolean hasMemberType = Member.class.isAssignableFrom(parameter.getParameterType());
return hasLgoinAnnotation && hasMemberType;
}
@Login 어노테이션이 있으면 Member 타입일 경우 해당 ArgumentResolver가 사용된다.
@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);
}
컨트롤러 호출 직전에 호출되어 필요한 파라미터 정보를 만들어 주는 역할을 한다.
세션에 있는 member 객체를 찾아 반환해 주고 컨트롤러의 메서드를 호출하면 여기에서 반환된 member 객체를 파라미터에 전달해 준다.
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new LoginMemberArgumentResolver());
}
LoginMemberArgumentResolver를 등록해 주었다.
이제 실행을 통해 확인할 수 있다 좀 더 편리하게 로그인 회원 정보를 조회할 수 있게 되었다.
ArgumentResolver는 공통 작업이 필요할 때 컨트롤러를 더 편리하게 사용할 수 있도록 해주는 역할을 한다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
반응형
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 서블릿 예외 처리 오류 화면 제공 기능 구현하기 (0) | 2022.02.25 |
---|---|
[Spring Boot] : Servlet Exception, 서블릿 예외 처리 시작하기 (0) | 2022.02.24 |
[Spring Boot] : 스프링 인터셉터 - 인증 체크 (0) | 2022.02.23 |
[Spring Boot] : 스프링 인터셉터 - 요청 로그 (0) | 2022.02.23 |
[Spring Boot] : 스프링 인터셉터 (0) | 2022.02.23 |
댓글