티스토리 뷰

BackEnd/Java

필터와 인터셉터

철철22 2018. 5. 31. 22:02
반응형


Rest API를 위한 서버단 언어를 자바를 사용하면서 로그인 부분에 대한 처리를 어떻게 해야하나 공부를

하다가 필터와 인터셉터에 대해 알게되었다.



공통점

Controller로 들어가는 요청을 가로채 특정 작업을 하기위한 용도로 사용



차이점 


스프링에서 reqeust가 어떻게 흘러다니는지가 나와있는 아래 그림을 보면 좀 이해가 한결 수월해진다. 

 

 


 

 

 

 

보통 인터셉터나 필터나 

컨트롤러 들어가기전에 작업을 처리 하기 위해 사용하므로 

별반 차이 없어 보일 수 있으나 

위의 라이프사이클 그림을 보면 

호출되는 시점이 다르다는걸 알 수 있다

 

 

인터셉터.

preHandle() : 컨트롤러 들어가기 전

postHanle() : 컨트롤러 들어갔다 나온후 뷰로 보내기전

afterCompletion() : 뷰까지 끝나고 나서

 

필터.

 - init() : 필터 인스턴스 초기화

 - doFilter() : 전/후 처리

 - destroy() : 필터 인스턴스 종료

 

doFilter 함수는 보통 아래처럼 작성된다. 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
         throws IOException, ServletException {
        // 전 처리   
        chain.doFilter(request, response);
        // 후 처리
         }


필터는 doFilter 함수에서 전후처리를 모두 담당하는데

doFilter가 요청전과 후, 

두번 호출되는 방식이다. 

 

개인적으로 정리해 보면 

인터셉터와 필터의 기능은 비슷하지만,

필터의 경우 

호출시점이 자유롭지 못하다 보니 

사용성에서는 분명 인터셉터보다 떨어지는 부분이 있을 듯하다.


 

1. Filter는 Dispatcher servlet의 앞단에서 정보를 처리하고, Interceptor는 Dispatcher servlet에서 Handler(Controller)로 가기 전에 정보를 처리한다.


2. 또한 필터는 J2EE 표준 스펙에 정의 되어 있는 기능이며, 인터셉터의 경우는 Spring Framework에서 자체적으로 제공하는 기능이라고 한다.

 

 

 

필터는 J2EE 표준 스펙에 나와있는 Servlet 기술중 일부라서 web.xml에 기술되는것으로 판단되고, 인터셉터는 비슷한 기술이지만, Spring에 녹인것으로 보이네요.

 

스프링 기반으로 한다면 당연히 필터보단 인터셉터를

스프링없이 단순 Servlet구현이라면 필터를 사용해 유사하게 구현가능

 

 

정확히 어떤 상황에 어떤 기능을 사용해야 하는가에 대해서는 갑론을박이 많지만, 인코딩이나 보안 관련 처리와 같은 web app의 전역적으로 처리해야 하는 로직은 필터로 구현하고 클라이언트에서 들어오는 디테일한 처리(인증, 권한 등)에 대해서는 주로 인터셉터에서 처리하는듯 하다.

 



Filter의 경우 주로 한글처리에 이용되고


Interceptor의 경우 "로그인 처리"에 이용이 된다.

- why 로그인 처리에 이용?? )

: 만약 인터셉터를 이용하지 않고, 로그인 처리를 한다면, 게시물을 작성("/board/register"), 게시물 수정("/board/modify"),

 게시물 삭제("/board/delete") 등 모든 요청마다 Controller에서 session을 통해 로그인 정보가 남아 있는지를 확인하는 코드

 를 중복해서 입력해야 할 것이다. 

 하지만!, 인터셉터를 이용하면, A, B, C 작업(A,B,C 경로로 요청)을 할 경우에는 ~~Interceptor를 먼저 수행해 session에서 

 로그인 정보가 있는지 확인해 주는 역할을 한다면, 중복 코드가 확 줄어들 수 있을 것이다. 이러한 장점 때문에 사용!



 

 

참조 : http://www.leafcats.com/40

 

http://changpd.blogspot.kr/2013/03/spring.html


http://rongscodinghistory.tistory.com/2

반응형

'BackEnd > Java' 카테고리의 다른 글

HashMap  (0) 2018.07.11
JPA에 대한 소개, 활용방안, Spring 프레임워크와 통합  (0) 2018.07.02
영속성  (0) 2018.06.26
CSRF  (0) 2018.06.26
Java log  (0) 2018.06.19
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함