Back-end/Spring-핵심& webMVC

Spring - 인터셉터

prden 2023. 1. 1. 17:57

1. HandlerInterceptor

인터셉터는 Controller의 핸들러가 실행 되기 전이나 후에 추가적인 작업을 실행하기 위해 사용한다. 

예를 들어 권한 체크, 로그인 체크 등

 

관리자 인터셉터

public class AdminInterceptor implements HandlerInterceptor {
    static final Logger LOGGER = LoggerFactory.getLogger(AdminInterceptor.class);
    
    /**
     * 관리자 페이지는 관리자만 접근 허용.     
     */
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
        HttpSession session = req.getSession();
        
        try {
            if (session == null || session.getAttribute("userno")  ==  null) {
                res.sendRedirect("memberLogin"); 
                return false;
            }
            if (!"A".equals(session.getAttribute("userrole"))) {
                res.sendRedirect("noAuthMessage"); 
                return false;
            }
        } catch (IOException ex) {
            LOGGER.error("AdminInterceptor");
        }
        
        return true;
    }
    
    public void postHandle(HttpServletRequest req, HttpServletResponse res, Object handler, ModelAndView mv) {
    }
    
    public void afterCompletion(HttpServletRequest req, HttpServletResponse res, Object handler, Exception ex) {
    }

}

 

1) prdHandle() :

컨트롤러가 호출되기 전에 실행됨, 컨트롤러가 실행 이전에 처리해야할 작업이 있는 경우 혹은 요청정보를 가공하거나 추가하는 경우에 사용, 실행되어야 할 핸들러에 대한 정보를 인자 값으로 받기 때문에 '서블릿 필터'에 비해 보다 세밀한 로직 구성 가능, 리턴 값이 boolean으로 true를 리턴하게 되면 preHandle() 실행 후 핸들러에 접근, false를 리턴하게 되면 작업을 중단해, 남은 인터셉터가 실행되지 않는다.

 

2) postHandle() :

핸들러가 실행완료되었지만 아직 View가 생성되기 전에 호출, ModelAndView 타입의 정보가 인자 값으로 받는다. 따라서 Controller에서 View에 정보를 전달하기 위해 작업한 Model객체의 정보를 참조하거나 조작 가능, prdHandle()에서 리턴 값이 false면 실행되지 않음, 적용중인 interceptor가 여려 개면 postHandle()는 역순으로 호출

 

3) afterCompletion():

모든 View에서 최종 결과를 생성하는 일을 포함한 모든 작업이 완료된 후에 실행, 요청 처리 중에 사용한 리소스를 반환해주기 적당한 메서드이다.

 

https://kimvampa.tistory.com/127

 

[spring] Spring Interceptor 란?(HandlerInterceptor, HandlerInterceptorAdapter)

목표 Interceptor 란 무엇인지 알아본다. Interceptor를 직접 구현해본다. 순서 1. 인터셉터(Interceptor) 1.1 인터셉터란? 1.2 왜 사용하는가? 1.3 구현 수단 1.4 어떤 메서드를 가지고 있는가? 2. 인터셉터 동작

kimvampa.tistory.com