티스토리 뷰





반응형

내가 구성한 홈페이지가 있는데 특정 기능들은 로그인 이후에 사용이 가능한 메뉴들이 있을 것이다. 이러한 기능을 사용할 때 이전에는 해당 서블릿에서 session값이 null이 아닐 경우 사용하고 null이면 로그인창으로 재요청을 했다. 이번에 그러한 필터와 비슷한 역할을 해주는 Intercept를 해볼 것이다.


Interceptor

필터와 비슷한 역할, 서블릿으로 들어오고 매핑된 메소드한테 가기 전에 가로챔


Interceptor 분기 시점 3가지

1.요청하자 마자 동작 (서블릿으로 도착하고 매핑된 메소드로 가기 직전에) - preHandle

2.응답되고 동작 (View화면 보이기전) - PostHandle

3.응답이 View화면이 보이고 난 이후 동작 - afterCompletion


사용방법

HandlerInterceptorAdapter를 상속해서 클래스를 구현, *해당하는 메소드를 오버라이딩 처리하여 구현


filter와 Interceptor차이점

filter는 서블릿으로 넘어오기전에 처리 후 넘어가고

Interceptor는 서블릿은 들어오고 매핑 메소드로 넘어가기 전 중 후로 처리를 해주는 것 이다.



1.HandlerInterceptorAdapter 객체 만들기

common 패키지에 위와 같이 만들었다. 그리고 왼쪽 네모에서 HandlerInterceptorAdaptor를 선택!

클래스에서 Alt+s +v를 눌러 메소드 자동완성ㄱㄱ


2.로직 구성하기(클릭하면 잘보여요)

매핑된 메소드에 가기전에 해당 유저가 로그인되어 있는지 session에서 값을 꺼내봐서 null일 경우 로그인 이후에 사용하라는 메세지와 함께 Dispatcher로 msg.jsp로 이동한다. sendRedirect는 사용 못한다. 왜냐하면 스프링부터는 WEB-INF아래에 jsp들이 있기 때문에 직접적인 주소 접근이 막혀 있어서 무조건 서블릿을 통하거나 Dispatcher로 넘겨야한다. 그리고 보이다시피 request, response 모두 사용이 가능 하기 때문에 원래 쓰듯이 사용하면된다.


3. servlet-context.xml매핑하기

1
2
3
4
5
6
7
    <interceptors>
        <interceptor>
            <mapping path="/demo/*.do"/>
            <beans:bean id="loginInterceptor" class="com.kh.spring.common.LoginCheckInterceptor"></beans:bean>
        </interceptor>
    </interceptors>
cs

맨 아래 위와 같이 추가를 해준다. mapping path는 해당 주소로 가는 것들을 가로챈다는 의미이다. 아래 bean id는 가로채서 작동 될 메소드가 있는 클래스를 지정해주는 것이다. 필자는 /demo 경로 아래에 .do로 끝나는 요청들을 위와같이 막았다.


결과 창

위와 같이 /demo 아래에 .do로 끝나는 요청이고 로그인을 하지않은 채로 시도했다가 막히는 것을 볼 수 있다.










반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31