Session 확인을 위한 Interceptor 설정
1. 구현
- 아래 패키지를 생성한다.
- src/main/java/interceptor
- 생성된 패키지 하위에 Interceptor 역할울 수행할 Class를 구현한다.
@Component
public class LoginInterceptor extends HandlerInterceptorAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(LOGGER.isInfoEnabled()) {
LOGGER.info("=======================<Interceptor Start>=======================");
LOGGER.info("Request URL \t: " + request.getRequestURI());
}
SessionModel sessionModel = SessionManager.getUserInfo(request);
if(null == sessionModel) {
response.sendRedirect("/signIn");
return false;
}
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if(LOGGER.isInfoEnabled()) {
LOGGER.info("=======================<Interceptor End>========================\n");
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception arg3) throws Exception {
if(LOGGER.isInfoEnabled()) {
LOGGER.info("Interceptor > afterCompletion");
}
}
}
- Class는 HanderInterceptorAdaptor를 상속하였다.
- 상속한 Class의 메소드를 Override하여 각 단계별 처리하고자 하는 로직을 구현한다.
- 여기에서는 preHandle에서 session을 갖는지 확인하는 로직을 담았다.
2. 설정
- Interceptor를 등록하기 위해 Configuration 클래스를 작성한다.
- 아래와 같이 작성하면 springboot 기동 시, Interceptor를 bean으로 등록한다.
- 더불에 Interceptor에 필터링되는 URL에 대한 설정도 할 수 있다.
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Autowired
@Qualifier(value = "loginInterceptor")
private HandlerInterceptor interceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor)
.addPathPatterns("/**")
.excludePathPatterns("/signIn/**")
.excludePathPatterns("/signInProcess/**")
.excludePathPatterns("/css/**")
.excludePathPatterns("/js/**")
.excludePathPatterns("/error/**")
.excludePathPatterns("/sample/**");
}
}
댓글남기기