인터셉터

최주영·2023년 7월 14일
0

spring

목록 보기
6/12

인터셉터 (Interceptor)

  • 매핑메소드가 실행될 때, 그 요청을 필터할 수 있는 기능
  • 매핑메소드가 실행되기 전, 후 필터를 함

✅ 인터셉터는 spring이 제공하는
HandlerInterCeptor (인터페이스)를 구현하거나
HandlerInterceptorAdapter(클래스) 상속받은 클래스를 선언

✅ 인터페이스에 선언된 추상메소드
preHandle :매핑메소드가 실행되기전에 실행되는 로직을 작성
postHandle : 매핑메소드가 실행된 후에 실행되는 로직을 작성
afterCompletion : 응답처리가 끝난 후 실행되는 로직을 작성


(1) 우선 인터셉터를 적용할 클래스를 만들기

LoginCheckInterceptor 클래스

  • 다음 클래스는 로그인한 회원일때만 기능을 이용할 수 있도록 만든 클래스
package com.bs.spring.common.interceptor;

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

import org.springframework.web.servlet.HandlerInterceptor;

import com.bs.spring.member.Member;

public class LoginCheckInterceptor implements HandlerInterceptor{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception { // 로그인 인터셉터 : 회원만 들어갈 수 있음
		HttpSession session = request.getSession();
		Member loginMember = (Member)session.getAttribute("loginMember");
		
		if(loginMember==null) {
			request.setAttribute("msg", "로그인 후 이용할 수 있습니다.");
			request.setAttribute("loc", "/");
			request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp").forward(request, response);
			return false;  // false -> 다음페이지로 넘어가지못함
		}
		return true;  // 다음페이지로 넘어갈 수 있음
	}
}

AdminCheckInterceptor 클래스

  • 다음 클래스는 관리자만 이용할 수 있도록 만든 클래스
package com.bs.spring.common.interceptor;

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

import org.springframework.web.servlet.HandlerInterceptor;

import com.bs.spring.member.Member;

public class AdminCheckInterceptor implements HandlerInterceptor{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		HttpSession session = request.getSession();
		
		Member loginMember = (Member)session.getAttribute("loginMember");
		
		if(loginMember == null || !loginMember.getUserId().equals("admin")) {
			request.setAttribute("msg", "관리자만 이용할 수 있는 서비스 입니다. :3");
			request.setAttribute("loc", "/");
			request.getRequestDispatcher("/WEB-INF/views/common/msg.jsp").forward(request, response);
			return false;
		}
		return true;
	}	
}

(2) : 만든 클래스를 빈으로 등록해서 사용하기

servlet-context.xml

	<!-- 인터셉터 등록하기 -->
	<interceptors>
		<interceptor>
			<mapping path="/demo/*"/> <!-- demo/ 매핑되는 페이지들을 대상으로 인터셉터등록 -->
			<beans:bean class="com.bs.spring.common.interceptor.LoggerInterceptor"/> 
          <!-- 밑에 예제처럼 빈을 따로 등록해도되지만, 인터셉터 태그안에다 빈 등록을 해도 가능 -->
		</interceptor>
      
      	<interceptor>
			<mapping path="/demo/selectDemoAll.do"/> 
			<beans:ref bean="loginCheck"/>
		</interceptor>
		
		<interceptor>
			<mapping path="/memo/*"/>
			<beans:ref bean="admincheck"/>
		</interceptor> 
	</interceptors>
  	
	<beans:bean id="admincheck" class="com.bs.spring.common.interceptor.AdminCheckInterceptor"/> <!-- 해당클래스 빈으로 등록 -->
	<beans:bean id="loginCheck" class="com.bs.spring.common.interceptor.LoginCheckInterceptor"/> <!-- 해당클래스 빈으로 등록 -->




     
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글