Spring

Spring 일지 #66 (20211005) 인터셉터

uni5948 2021. 10. 8. 21:10

65. 인터셉터

-인터셉터(컨트롤러에서 공통적으로 해야 하는 일을 설정)

 *참고 (인터 셉터 란? 특정 URI로 요청시 Controller로 가는 요청을 가로채는 역할을 한다
출처: https://rongscodinghistory.tistory.com/2 [악덕고용주의 개발 일기]

Ex) 1~30 개의 페이지가 있을 때 어느 페이지에서든 로그인하면 해당 페이지로 다시 돌아가야 하는 경우  

(5페이지->로그인->5페이지)

 

 *패키지 생성

패키지 생성

 * InterceptorConfig.java 생성

 

InterceptorConfig.java 생성

 

 * 오버라이드 하기(InterceptorConfig.java)

addinterceptor 오버라이드

 

 * autowired

autowired

 

package com.example.interceptor;

 

더보기

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

 

@Configuration

public class InterceptorConfig implements WebMvcConfigurer{

 

    @Autowired

    HandlerInterceptor interceptor;

 

    @Override

    public void addInterceptors(InterceptorRegistry registry) {

        

        //전체 페이지는 모두 허용하고

        // /api/member/login 또는 /api/member/login/** 은 제외됨

        registry.addInterceptor(interceptor)

            .addPathPatterns("/**")

            .excludePathPatterns("/api/member/login""/api/member/login/**");

    }

}

 

 * MyInerceptor.java 생성

MyInerceptor.java 생성

 * posthandle 오버라이드

posthandle 오버라이드

 

package com.example.interceptor;

더보기

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.stereotype.Component;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

 

@Component

public class MyInerceptor implements HandlerInterceptor{

 

    @Override

    public void postHandle(

        HttpServletRequest request

        HttpServletResponse response

        Object handler,

        ModelAndView modelAndViewthrows Exception {

        

        String path = request.getServletPath();

        System.out.println(path);

    }

}

 

 

 * 인터셉터 패키지 등록(Boot20211005Application.java)

... ...

@ComponentScan(basePackages = { "com.example.controller""com.example.security""com.example.jwt",

        "com.example.service""com.example.scheduler""com.example.interceptor" })

... ...

 

 * 인터셉터 구현

 * 크롬이나 포스트맨으로 주소 접속

 * login 페이지와 아닌 페이지 접속 시 출력값 확인

home 접속
출력값 확인

 

로그인 페이지
인터셉터 값 미출력