더북(TheBook)

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;
    }
 
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.