반응형
안녕하세요
이번 포스팅에서는 Spring Boot에서 인터셉터를 사용하는 방법에 대해서 작성하려고 합니다.
인터셉터(Interceptor) ?
클라이언트가 Spring Boot 컨트롤러의 URL에 접근을 할 때 제어하는 기능입니다.
URL에 접근 하기 전에 특정한 로직을 거친 뒤에 URL로 보낼 수도 있으며 (preHandle)
URL에 접근 하고 난 후에 특정한 로직을 거치게 할 수 있습니다. (postHandle)
인터셉터는 어디에서 주로 사용할까?
로그인이 되어있는 지, 로그인이 잘 유지되고 있는 지 등 과 같은 기능에서 사용한다.
적용해보기
1. Spring Boot에 아래와 같이 WebInterceptor java파일을 생성한다.
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class WebInterceptor extends HandlerInterceptorAdapter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
// 요청 들어가기 전
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("================ URL 요청 전 인터셉터 ==================");
return super.preHandle(request, response, handler);
}
// 요청 완료 후
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.info("================ URL 요청 후 인터셉터 ==================");
}
}
2. WebMvcConfigurer 상속받은 자바 파일(없으면 생성)에 위에서 만든 WebInterceptor를 추가하면 끝.
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
// WebInterceptor 추가
@Override
public void addInterceptors(InterceptorRegistry registry) {
// Interceptor 추가
registry.addInterceptor(new WebInterceptor())
// 아래의 URL은 인터셉터 적용X
.excludePathPatterns("/css/**", "/fonts/**");
}
}
- 로그인 체크 인터셉터 만들어보기
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.User.UserDto;
public class WebInterceptor extends HandlerInterceptorAdapter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
// 요청 들어가기 전
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
// 요청 URL
String url = request.getRequestURI();
// 아래 URL이 아니라면 로그인 체크
if(! (url.equals("Login") || url.equals("Signup")) )
{
// UserDto는 User에 대한 Dto인데 로직 흐름을 참고만 하셔도 됩니다.
UserDto user = (UserDto) session.getAttribute("User");
// 로그인 정보가 없으면
if(user == null) {
// 튕겨내기
return false;
}
}
return super.preHandle(request, response, handler);
}
// 요청 완료 후
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
}
반응형
'BE > Spring' 카테고리의 다른 글
[Spring Boot] Jasper Reports 설정하기 (0) | 2022.05.13 |
---|---|
[Spring Boot] LogBack 설정 (0) | 2022.05.11 |
[Spring] Bean & IoC Container (0) | 2022.03.28 |
[Spring] DI & IOC (0) | 2022.03.27 |
[Spring] 스프링 프레임워크 버전 확인 (0) | 2021.09.27 |