본문 바로가기
[ Project ]/Team

[ Team ] 인터셉터(Interceptor) 구현

by 환이s 2023. 6. 21.


담당 기능

 

 

이전 포스팅으로 관리자 페이지 및 소셜 로그인 기능 구현에 대해서 포스팅을 해봤습니다.

interceptor 기능은 정말 팀원분들과 소통을 많이 하고 고민 후 구현하기로 정했습니다.

(security 코드 구현을 하고 싶었지만.. 시간이 부족한 상황이라 interceptor 기능을 구현합니다..!)

 

team 포스팅은 코드 구현 위주로 글을 작성하기 때문에 개념 설명은 생략하겠습니다.

 

Interceptor 기능에 대해서 알아보시는 분들은 아래 포스팅을 참고해 보시면 좋을 거 같습니다!

 

 

[ Spring ] Interceptor

Interceptor란? Interceptor는 요청을 가로채는 작업을 의미합니다. 즉, 사용자의 요청이 Controller에 가기 전에 가로채고, 서버의 응답이 사용자에게 가기 전에 가로챕니다. 좀 더 풀어보자면, 해당 URL

drg2524.tistory.com

 

프로젝트 구조는 다음과 같습니다.

 

프로젝트 구조

 


Logininterceptor

 

Interceptor를 지원하는 두 가지 방법 중 프로젝트에 설정한 방법은 추상 클래스를 활용하는 코드로 작성했습니다.

 

(Interceptor 블로그 참고!)

 

package com.example.trakker.interceptor;


import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Logininterceptor extends HandlerInterceptorAdapter {
    
    @Override // 선처리
    public boolean preHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler ) throws Exception{

        HttpSession session = request.getSession();

        if (session.getAttribute("mem_email") == null){ // Main Action 페이지로 이동 안됨
            //로그인 페이지로 이동
            response.sendRedirect(request.getContextPath()+"/member/login.do");
            return false;
        }else {
            return true;
        }


    }

    @Override // 후처리
    public void postHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler,
            ModelAndView modelAndView) throws Exception{

        super.postHandle(request,response,handler,modelAndView);
    }

}

 

추상 클래스인 HandlerInterceptorAdapter는 3가지의 메서드를 제공하는데, 선 처리 / 후 처리 메서드만 사용했습니다.

 

preHandle - Controller에 요청이 들어가기 전에 수행합니다. (선 처리)

 

postHandle - Controller의 메서드의 처리가 끝나 return 되고 화면을 띄워주는 처리가 되기 직전에 메서드가 수행됩니다.(후 처리)

 


servlet-context.xml

 

Interceptor를 사용하기 위해 빈 등록을 해주고, 사용할 파일 경로를 mapping 시켜줍니다.

 

<beans:bean id="loginInterceptor" class="com.example.trakker.interceptor.Logininterceptor">	</beans:bean>


	<interceptors>
		<interceptor>
			<mapping path="/admin/adminPage.do"/>
			<beans:ref bean="loginInterceptor"/>
		</interceptor>
	</interceptors>

 

위 매핑된 패스 경로는 관리자 페이지 이동 경로입니다. 

관리자 페이지를 클릭했는데, [mem_email] 즉, session 값이 없다면 login 페이지로 강제 이동합니다.

 


구현 결과

 

 

< 관리자 페이지 클릭 >

 

 

< 인터셉터 >

 

 

로그인 후 진행해 보겠습니다.

 

 

 

< 관리자 페이지 >

 


마치며

 

담당 기능 인터셉터 기능 구현 포스팅을 해보았습니다.

다음 포스팅에서 뵙겠습니다.

 

728x90