@Slf4j
public class LoginMemberArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
log.info("supportsParameter 실행");
// 파라미터 정보에서 @Login 애너테이션이 있는지 확인한다.
boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class);
// 파라미터가 Member 타입인지 확인한다.
boolean hasMemberType = Member.class.isAssignableFrom(parameter.getParameterType());
// 두 조건을 모두 만족하면 true가 반환되면서 resolveArgument()가 실행된다.
return hasLoginAnnotation && hasMemberType;
}
@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
log.info("resolveArgument 실행");
// HttpServletRequest을 NativeWebRequest에서 뽑는다.
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
HttpSession session = request.getSession(false);
if (session == null) {
return null;
}
return session.getAttribute(SessionConst.LOGIN_MEMBER);
}
}