인터셉터
(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"/> <!-- 해당클래스 빈으로 등록 -->