본문 바로가기
공부/JAVA

[Spring] Interceptor

by 미네밍 2020. 8. 8.

[Interceptor]

현재 하고 있는 프로젝트에서 로그인 시 권한체크를 Interceptor로 구현해주고 있는 상황이다.

기존 시스템에 새로운 프로그램을 도입하였고, 새로운 프로그램에서 만든 Interceptor가 기존 시스템에 영향을 끼쳐 권한이 없어 화면이 동작하지 않는 등 문제가 생겼다.

 

문제는 해결되었으나, 이에 대해 조금 더 깊이 이해하고, 추후 또 발생할 수 있는 문제점을 방지할 수 있으려면 코드를 어떻게 고쳐야 할지에 대해 이해하고 싶어 이를 공부하고 글을 남겨놓기로 하였다.

 

인터셉트. 용어의 의미처럼 중간에 가로챈다는 의미이다.

컨트롤러에 들어오는 HttpRequest와 HttpResponse를 가로채는 역할을 하며, 인증용도로 활용하는 등(위의 사례처럼, 권한체크) 의 기능을 구현할 때 활용가능하다.

 

https://victorydntmd.tistory.com/176 이미지출처. mvc lifecycle

위 그림을 보니 빨간색 박스로 표시되어 있는 것이 Interceptor의 역할이다. 

 

Interceptor를 구현한 클래스는 preHandler, postHandler, afterComplete 이라는 함수를 구현해야만 한다.

preHandler의 경우, Controller 호출 전

postHandler의 경우, Controller 호출 후

afterComplete의 경우, view 의 생성 후 

와 같이 각 함수의 호출시점이 다르다. 각 메소드의 반환값이 false 라면, 남은 메소드 및 컨트롤러가 실행되지 않는다.

 

Interceptor는, servlet.xml 파일에 따로 지정하여야 하며, 어떤 경로에 있는 파일들에 대해 Interceptor를 타게 할 것인지 설정할 수 있다.

(참고로, filter도 비슷한 역할을 하는데, 그림에서와 같이 Dispatcher Servlet 호출 전, 호출 후에 수행되며, web.xml 파일에 설정해주어야 한다.)

xml 파일에 설정을 하고나서, Interceptor를 구현(implements)하고 위의 3가지 메소드에 코드를 구현한다.

현재 우리 프로젝트에서 권한체크 부는 preHandler 메소드에 있다.

 

Interceptor의 경우, 로그인이나 권한체크, 인증 등 여러 방면으로 사용이 가능하다.

 

참고사이트

https://victorydntmd.tistory.com/176

 

댓글