Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- While
- JAVA객체지향
- java변수
- 시스템 환경 변수 편집
- 집합관계
- 생성자
- Thread
- function
- OPP개념
- 형 변환
- break문
- 컴파일
- Java데이터 타입
- this예약어
- 메서드
- 인텔리제이 한글 깨짐 해결법
- 상수
- 연관관계
- 접근제어지시자
- Java
- multi-threading
- JAVA기초
- 메서드 오버로딩
- 반복문
- for문
- 자바 멀티스레딩
- 인텔리제이 기초 설정
- 포함관계
- IntelliJ IDEA
- continue문
Archives
- Today
- Total
최원종의 개발 블로그
V4-3 intercepter 활용 (인증검사 공통 처리) 본문
intercepter 개념

- intercepter
인터셉터는 Spring MVC의 핵심 기능 중 하나로,
웹 애플리케이션에서 공통적인 처리를 재사용할 수 있게 해주는 강력한 도구.
인터셉터(Interceptor)는 들어오는 요청과 나가는 응답을 가로채어
특정 로직을 수행할 수 있게 해주는 매커니즘을 제공한다.
이는 AOP(Aspect-Oriented Programming)의 일종으로 볼 수 있으며,
컨트롤러(Controller)로 요청이 도달하기 전, 후 또는 완료된 후에 추가적인 처리를 하기 위해 사용한다
intercepter 활용 사례
1. 인증 및 권한 부여: 사용자의 인증 정보를 검사하여 요청이 유효한 사용자로부터 온 것인지 확인하고,
특정 자원에 대한 접근 권한을 확인함.
2. 로깅 및 감사: 요청의 처리 과정에 대한 로깅을 수행하거나 감사 로그를 생성하여
시스템의 보안과 무결성을 유지하는 데 도움을 줌.
3. 성능 모니터링: 요청 처리 시간을 측정하고 성능 문제를 식별하기 위한 메트릭을 수집함.
4. 공통적인 응답 데이터 추가: 모든 응답에 공통적으로 포함되어야 하는 헤더나 데이터를 추가함.
intercepter 구현 방법
1. 동작 시키고자 하는 인터셉터 기능을 클래스로 만들어 주기.
단, 만들고 자 하는 해당 클래스에 HandlerInterceptor 인터페이스를 구현하거나
HandlerInterceptorAdapter 클래스를 상속받아야 함.
2. 내가 만든 인터셉터를 Spring Boot 애플리케이션에 등록을 해주어야 동작 함.
등록시에는 WebMvcConfigurer 인터페이스를 구현하는 설정 클래스에서
addInterceptors 메서드를 오버라이드하여 인터셉터를 등록함.
LoginInterceptor 동작 흐름
1. preHandle
타이밍: 컨트롤러의 메서드가 실행되기 직전에 호출됨.
로직: 세션에서 sessionUser를 꺼내어 null이면 Exception401 예외를 던져 요청을 즉시 중단함.
리턴값의 의미:
true: "인증 완료! 컨트롤러로 가세요."
false (또는 예외 발생): "여기서 끝. 컨트롤러 진입 불가!"
2. postHandle
타이밍: 컨트롤러가 작업을 마치고 뷰(Mustache 등)가 렌더링되기 직전에 호출됨.
용도: 컨트롤러가 보낸 데이터(ModelAndView)를 뷰로 가기 전에 가공하거나 공통 데이터를 추가할 때 사용.
3. afterCompletion
타이밍: 화면 렌더링까지 끝나고 사용자에게 최종 응답이 전송된 후 호출됨.
용도: 요청 처리 과정에서 사용한 리소스를 해제하거나,
실행 시간을 측정하여 로그를 남기는 등 마무리 작업에 사용됨.
LoginInterceptor 코드
package com.tenco.blog._core.interceptor;
import com.tenco.blog._core.errors.Exception401;
import com.tenco.blog.user.User;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component // IoC 대상 - 싱글톤 패턴
public class LoginInterceptor implements HandlerInterceptor {
// 컨트롤러에 들어오기 전에 먼저 동작
// 리턴에 true 있으면 ---> Controller 로 진행 됨.
// 리턴에 false 있으면 --> 안들여 보냄 (Controller 진입 불가)
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
User sessionUser = (User) session.getAttribute("sessionUser");
if(sessionUser == null) {
throw new Exception401("로그인 먼저 해주세요");
}
return true;
}
// 뷰가 렌더링 되기 전에 낚아 채는 녀석
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
// 요청 처리가 완료된 후, 즉 뷰가 완전 렌더링이 된 후 호출 된다.
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
WebMvcConfig 코드 (등록)
package com.tenco.blog._core.config;
import com.tenco.blog._core.interceptor.LoginInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
// 자바 코드로 스프링 부트 설정 파일을 다룰 수 있다.
// @Component
@Configuration // IoC 대상 - 하나 이상의 IoC 처리를 하고 싶을 때 사용 한다.
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired // DI 처리
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 여기에 LoginInterceptor 등록할 예정
System.out.println("인터셉터 동작 함 ");
registry.addInterceptor(loginInterceptor)
// 이 loginInterceptor 동작할 URL 패턴을 명시 해주어야 한다.
.addPathPatterns("/board/**", "/user/**")
// 인터셉터에서 제외할 URL 패턴을 지정
// /board/7 <-- 정수값이 들어 오면 제외 시켜
.excludePathPatterns("/board/{id:\\d+}");
// 예: board/1, board/7 등은 로그인 없어도 접근 가능
}
}
'Spring boot 입문' 카테고리의 다른 글
| 스프링부트 V5 JPARepository + Service(JpaRepository 인터페스와 Optional 타입) (0) | 2026.05.19 |
|---|---|
| Spring Boot 필수 어노테이션(Annotation) 총정리 (0) | 2026.05.18 |
| V4-2 에러 컨트롤러 및 커스텀 예외 처리 (@ControllerAdvice 활용) (0) | 2026.05.18 |
| V4 (인증과 권한 처리와 예외 처리)-1 에러 페이지 만들기 (0) | 2026.05.15 |
| V3-10 회원정보보기 및 수정 및세션 동기화 처리 (0) | 2026.05.15 |
