<aside> 📌 스프링부트에서 Interceptor란?
</aside>
<aside> 📌 interceptor 사용예시 (xml 사용)
</aside>
<!-- Interceptors -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.victolee.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
com.victolee.interceptor
패키지에 있는 MyInterceptor
객체를 실행하겠다는 의미이다.HandlerInterceptor
인터페이스를 구현하거나 HandlerInterceptorAdapter
클래스를 상속받아야 한다.public class MyInterceptor implements HandlerInterceptor {
// controller로 보내기 전에 처리하는 인터셉터
// 반환이 false라면 controller로 요청을 안함
// 매개변수 Object는 핸들러 정보를 의미한다. ( RequestMapping , DefaultServletHandler )
@Override
public boolean preHandle(
HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
System.out.println("MyInterCeptor - preHandle");
return false;
}
// controller의 handler가 끝나면 처리됨
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse response,
Object obj, ModelAndView mav)
throws Exception {
}
// view까지 처리가 끝난 후에 처리됨
@Override
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response,
Object obj, Exception e)
throws Exception {
}
}
preHandle
메서드는 컨트롤러가 호출되기 전에 실행되며, postHandle
메서드는 컨트롤러가 실행된 후에 호출되고, afterCompletion
메서드는 뷰에서 최종 결과가 생성하는 일을 포함한 모든 일이 완료 되었을 때 실행된다.public class AuthLoginInterceptor extends HandlerInterceptorAdapter {
@Autowired
private UserService userService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
String email = request.getParameter("email");
String pwd = request.getParameter("pwd");
UserVO vo = new UserVO();
vo.setEmail(email);
vo.setPwd(pwd);
userService.getUser(vo);
return false;
}
}
AuthLoginInterceptor
**가 **HandlerInterceptorAdapter
**를 상속받아 preHandle
메서드를 오버라이딩 하여 로그인 처리를 수행한다.getParameter
메서드로 데이터를 가져올 수 있고 **UserVO
**를 Service
계층에 전달하여 해당 유저가 존재하는지 확인한다.<aside> 📌 interceptor 사용예시 (@Configuration사용)
</aside>