728x90
인터셉터
인터셉터는 스프링 MVC 구조에 특화된 필터 기능을 제공한다고 이해하면 된다.
스프링 MVC를 사용할때, 필터 보다는 인터셉터를 사용하는것이 더 편리하다.
**로그 찍는 인터셉터 예시
@Slf4j
public class LogInterceptor implements HandlerInterceptor {
public static final String LOG_ID = "logId";
@Override
public boolean preHandle(HttpServletRequest, HttpServletResponse response, Object handler)
throws Exception {
String requestURI = request.getRequestURI();
String uuid = UUID.randomUUID().toString();
request.setAttribute(LOG_ID, uuid);
if(handler instanceof HandlerMethod) {
HandlerMethod hm = (HandleMethod) handler;
//호출할 컨트롤러 메서드의 모든 정보가 포함되어 있음.
}
return true;
}
@Override
public boolean postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView ) throws Exception {
log.info("postHandle [{}]", modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler , Exception ex) throws Exception {
String requestURI = request.getRequestURI();
String logId = (String) request.getAttribute(LOG_ID);
log.info ("RESPONSE [{}][{}]" , logId , requestURI);
if(ex != null) {
log.error("afterCompletion error !!! ", ex) ;
}
}
}
인터셉터 등록 - WebConfig.java
@Configuration
public class webConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new LogInterceptor())
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/css/**", "/*.ico", "/error");
}
}
**코드로 찍어보기!!
Q. 로그인 인증 체크 기능으로 구현해보자.
로그인 체크 interceptor - LoginCheckInterceptor
**인증이라는 것은 컨트롤러 호출 전에만 호출되면 된다. 따라서 preHandle만 구현하면 된다.
@Slf4j
public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest, HttpServletResponse response, Object handler)
throws Exception {
String requestURI = request.getRequestURI();
log.info("인증체크 인터셉터 실행 {}", requestURI);
HttpSession session = request.getSessionI(false);
if(session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null) {
log.info("미인증 사용자 요청");
//로그인으로 redirect
response.sendRedirect("/login?redirectURL=" + requestURI);
return false;
}
return true;
}
}
인터셉터 등록 - WebConfig.java에 추가
@Configuration
public class webConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new LogInterceptor())
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/css/**", "/*.ico", "/error");
}
}
'mini_project > 회원가입, 로그인 구현하기' 카테고리의 다른 글
[servlet] 필터 (filter) 개념 / 흐름 / 예시 (0) | 2021.12.16 |
---|---|
[servlet] 세션(session)생성 "HttpSession" (0) | 2021.12.14 |
[Spring] 세션(session)에 따른 컨트롤 "@SessionAttribute", 타임아웃 설정 (0) | 2021.12.14 |
로그인/로그아웃 구현하기_spring boot, jsp, javascript, mybatis 사용 (0) | 2021.06.09 |
회원가입 구현하기_spring boot, jsp, javascript, mybatis 사용 (2) | 2021.06.09 |