오봉이와 함께하는 개발 블로그
스프링 MVC 2 - ArgumentResolver 활용 본문
728x90
ArgumentResolver 활용
ArgumentResolver를 활용해서 로그인 회원을 조금 편리하게 찾아보자.
HomeController - 추가
@GetMapping("/")
public String homeLoginV3ArgumentResolver(@Login Member loginMember, Model model) {
// 세션에 데이터가 없으면 home
if (loginMember == null) {
return "home";
}
// 세션이 유지되면 로그인으로 이동
model.addAttribute("member", loginMember);
return "loginHome";
}
@Login
어노테이션을 만들어야 컴파일 오류가 사라진다.
@Login
어노테이션이 있으면 직접 만든 ArgumentResolver
가 동작해서 자동으로 세션에 있는 로그인 회원을 찾아주고, 만약 세션에 없다면 null
을 반환하도록 개발해보자.
@Login 애노테이션 생성
package hello.login.web.argumentresolver;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Login {
}
LoginMemberArgumentResolver 생성
@Slf4j
public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
log.info("supportParameter 실행");
boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class);
boolean hasMemberType = Member.class.isAssignableFrom(parameter.getParameterType());
return hasMemberType && hasLoginAnnotation;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
log.info("resolverArgument 실행");
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
HttpSession session = request.getSession();
if (session == null) {
return null;
}
return session.getAttribute(SessionConst.LOGIN_MEMBER);
}
}
- supportsParameter() : @Login 어노테이션이 있으면서 Member 타입이면 해당 ArgumentResolver가 사용된다.
- hasLoginAnnotation과 hasMemberType로 검사
- resolveArgument() : 컨트롤러 호출 직전에 호출 되어서 필요한 파라미터 정보를 생성해준다.
- 여기서는 세션에 있는 로그인 회원 정보인 member 객체를 찾아서 반환해준다.
- 이후 스프링MVC는 컨트롤러의 메서드를 호출하면서 여기에서 반환된 member 객체를 파라미터에 전달해준다.
WebMvcConfigurer에 설정 추가
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new LoginMemberArgumentResolver());
}
//...
}
실행
실행해보면, 결과는 동일하지만, 더 편리하게 로그인 회원 정보를 조회할 수 있다.
이렇게 ArgumentResolver를 활용하면 공통 작업이 필요할 때 컨트롤러를 더욱 편리하게 사용할 수 있다.
출처 : 인프런 김영한 지식공유자님 강의 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
728x90
'BE > Spring' 카테고리의 다른 글
스프링 MVC 2 - 서블릿 예외 처리 오류 화면 제공 (0) | 2022.08.30 |
---|---|
스프링 MVC 2 - 서블릿 예외 처리 시작 (0) | 2022.08.30 |
스프링 MVC 2 - 스프링 인터셉터 인증 체크 (0) | 2022.08.30 |
스프링 MVC 2 - 스프링 인터셉터 소개 (0) | 2022.08.29 |
스프링 MVC 2 - 서블릿 필터 인증 체크 (0) | 2022.08.29 |
Comments