인터셉터(Interceptor)
인터셉터(Interceptor)는 J2EE 표준 스펙인 필터(Filter)와 달리 Spring이 제공하는 기술로, 디스패처 서블릿(Dispatcher Servlet)이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다. 즉, 웹 컨테이너에서 동작하는 필터와 달리 인터셉터는 스프링 컨텍스트에서 동작을 하는 것이다. 출처
인터셉터를 이용해 로그인 체크, 로그기록 관리 등 WEB에서 공통으로 처리해야 하는 기능을 다룰 수 있다.
public class LoginCheckIntercepter extends HandlerInterceptorAdapter
HandlerInterceptorAdapter 인터페이스를 상속하는 메소드를 만들어 테스트
< preHandle >
컨트롤러 호출되기 전에 호출되는 메소드(HandlerAdapter호출 전에 실행됨)
return이 true이면 다음으로 진행되고 false이면 더 진행하지 않고 멈춘다.
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("==============preHandle=============");
HttpSession session = request.getSession(false);
if(session != null) {
MemberDTO user = (MemberDTO)session.getAttribute("user");
if(user==null) {
response.sendRedirect("/erp/emp/login.do");
return false; // 다음 컨트롤러를 실행할 수 없도록 처리
}
}
return true;
}
세션정보가 있으면 로그인을 한 상태로 판단하여 true를 리턴한다. 로그아웃을 하지 않은 상태에서는 로그인을 하는 페이지로 이동하도록 해준다.
컨트롤러가 실행되기 전에 실행되는 메소드이기 때문에 로그아웃을 하지 않은 걸 확인한 후 뷰를 보여준다.
< postHandle >
컨트롤러 실행 후에 호출되는 메소드(HandlerAdapter호출 후에 실행됨)
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("******************postHandle*****************");
}
preHandle 메소드와 컨트롤러가 실행된 후에 실행된다. "******postHandle******" 마지막에 출력됨
출력결과
==================preHandle==================
컨트롤러 실행됨
******************postHandle*****************
스프링 설정파일
<!-- ==============================인터셉터======================================== -->
<interceptors>
<interceptor>
<mapping path="/**"/>
<!-- <mapping path="/board/**"/> 어떤 요청에 대해서 인터셉터를 적용하겠냐를 정의하기
<mapping path="/emp/mypage/myjob"/>
<exclude-mapping path="/board/download/**"/> -->
<exclude-mapping path="/index.do"/>
<exclude-mapping path="/board/list.do"/>
<exclude-mapping path="/emp/login.do"/>
<exclude-mapping path="/emp/spring/login"/>
<exclude-mapping path="/images/**"/>
<exclude-mapping path="/images/**"/>
<exclude-mapping path="/board/ajax/list.do"/>
<beans:bean class="com.multi.erp.common.LoginCheckIntercepter"/>
</interceptor>
</interceptors>
'Spring' 카테고리의 다른 글
2023-01-04 트랜잭션 처리하기 (0) | 2023.01.04 |
---|---|
2022-12-16,19 mongodb (0) | 2022.12.19 |
파일업로드로직 메소드 (0) | 2022.12.15 |
2022-12-15 파일다운로드 (0) | 2022.12.15 |
2022-12-13~15 파일업로드 (0) | 2022.12.14 |
댓글