addViewControllers에서는 로그인 페이지용 뷰를 매핑하고, addArgumentResolvers 메서드에서는 ReaderHandlerMethodArgumentResolver를 인자 리졸버로 추가하여 Reader 타입(코드 3-9 참고)의 컨트롤러 매개변수를 처리할 수 있도록 했다.
코드 3-4 ReaderHandlerMethodArgumentResolver
package readinglist;
import org.springframework.core.MethodParameter;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
public class ReaderHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return Reader.class.isAssignableFrom(parameter.getParameterType());
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer
mavContainer, NativeWebRequest webRequest, WebDataBinderFactory
binderFactory) throws Exception {
Authentication auth=(Authentication) webRequest.getUserPrincipal();
return auth != null && auth.getPrincipal() instanceof Reader ?
auth.getPrincipal() : null;
}
}