BE/Spring

[Spring Boot] 인터셉터(Interceptor) 사용법

멍목 2022. 2. 24. 21:27
반응형

안녕하세요

 

이번 포스팅에서는 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 {
		
	}

}

 

 

반응형