[Spring Boot] 인터셉터 (Interceptor) ★

2023. 4. 13. 15:35·Java/Spring Boot
728x90
728x90

인터셉터 (Interceptor)

  - 요청을 처리하기 전과 후에 실행되는 코드

  - 컨트롤러에 도달하기 전과 후에 사용자 지정 작업을 수행할 수 있음

 

  - Filter와 매우 유사한 형태

      → 차이점 : Spring Context에 등록되고, Spring Container에서 동작함

                          (Filter는 WAS에서 동작)

      · 필터는 인증 과정에서 로깅 정도로만 사용함

         (어떤 데이터가 들어 있는지 등)

  - AOP와 유사한 기능 제공

      : 선/후 처리함으로써, 비즈니스 로직과 분리시킴

  - 용도

      · 인증 단계 처리

      · 로깅, 인가, 데이터 변환 등의 공통 작업 수행

  - 필요에 따라 인터셉터를 여러 개 등록하거나, 특정 경로/패턴에만 적용할 수도 있음

#  DispatcherServlet (디스패쳐 서블릿)

  - 클라이언트가 어떤 요청을 했을 때, 스프링 컨테이너의 제일 앞에서 요청을 먼저 받아서

    적합한 컨트롤러에게 요청을 위임해준느 프론트 컨트롤러

 

 

반응형
728x90

인터셉터 구현 방법

  - 예시 코드 : https://young0105.tistory.com/201

1. HandlerInterceptor 인터페이스의 구현 클래스 정의

  · Spring Boot MVC에서 제공하는 인터셉터

  · AOP 개념과 다르게, 서블릿 필터처럼 동작함

  · 클라이언트의 요청이 컨트롤러에 도달하기 전에 인터셉터 요청/응답을 가로채어 필요한 로직을 수행할 수 있음

 

  1) preHandle() 메서드

      - 컨트롤러가 실행되기 전에 호출되는 메서드

      - 요청을 가로채서 필요한 작업을 수행한 후, 요청 처리가 계속되어야 하는지 여부 결정

          · return true; : 요청 처리 계속 (Controller 메서드로 넘어감)

          · return false; : 요청 처리 중단 (Controller 메서드로 넘어가지 않음)

    - 활용 예시 : 인증 검사

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Component
public class AuthInterceptor implements HandlerInterceptor {
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
    
        // 인증 검사
        HttpSession session = request.getSession();
        User principal = (User) session.getAttribute(Define.PRINCIPAL);
        if (principal == null) {
            
            // 사용자 정의 예외 클래스 활용
            throw new UnAuthorizedException("로그인 후 이용해주세요.", HttpStatus.UNAUTHORIZED);
                
        }
            
        return true;
    }
}
Colored by Color Scripter
cs

 

  2) postHandle() 메서드

      - 컨트롤러 실행 후 호출되지만, 뷰가 렌더링되기 전에 호출되는 메서드

      - 컨트롤러가 요청을 처리한 후에, 필요한 후처리 작업을 수행함

 

  3) afterCompletion() 메서드

      - 요청 처리가 완료되고, 뷰가 렌더링된 후에 호출되는 메서드

      - 자원 정리, 추가 로깅 등의 작업을 수행함

  

  #  순서 : preHandle() → Controller 메서드 → postHandle() → afterCompletion()

 

2. WebMvcConfigurer 인터페이스의 구현 클래스 정의 & 1번에서 정의한 클래스 등록

  - addInterceptors() 메서드 오버라이드 

      → 인터셉터 인스턴스 등록

  - 활용 예시

      : 인증이 필요한 페이지에 대해서만 인터셉터를 적용함

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
 
    @Autowired
    private AuthInterceptor authInterceptor;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor)
                .addPathPatterns("/account/**")
                .addPathPatterns("/auth/**"); // 다중 path 추가 가능
        
        // 추가 인터셉터 등록 가능
        // registry.addInterceptor(new AdminInterceptor());
    }
}
Colored by Color Scripter
cs
320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > Spring Boot' 카테고리의 다른 글

[Spring Boot] 인터셉터 구현 예시  (0) 2023.04.13
[Spring Boot] 세션 (Session)  (0) 2023.04.13
[Spring Boot] 필터 (Filter)  (0) 2023.04.12
[Spring Boot] JSP 템플릿 엔진 연결하기  (0) 2023.04.12
[Spring Boot] 예외 처리 (exception)  (0) 2023.04.12
'Java/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] 인터셉터 구현 예시
  • [Spring Boot] 세션 (Session)
  • [Spring Boot] 필터 (Filter)
  • [Spring Boot] JSP 템플릿 엔진 연결하기
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (385)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • IT Notes (13)
      • Error Notes (17)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
      • etc. (0)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    SWAGGER
    오블완
    C#
    Android
    Swing
    errorNote
    SEO
    php
    git
    jsp
    Hotkeys
    js
    jQuery
    Codeigniter
    cs
    typeScript
    CSS
    면접
    HTML
    zapier
    SQL
    java
    티스토리챌린지
    tailwindcss
    vuejs
    SpringBoot
    http
    Wordpress
    개발일지
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Spring Boot] 인터셉터 (Interceptor) ★
상단으로

티스토리툴바