스프링 MVC 2 - 정리(로그인 처리 2 - 필터, 인터셉터)
반응형
정리(로그인 처리 2 - 필터, 인터셉터)
- 서블릿 필터 - 소개
- 공통 관심사항 처리를 하는 것이다.
- AOP로도 해결할 수 있지만, 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들이 필요한데,
서블릿 필터나 스프링 인터셉터는 HttpServletRequest를 제공한다. - 필터는 서블릿이 지원하는 수문장이다.
- 서블릿 필터 흐름 = HTTP 요청 → WAS → 필터 → 서블릿(디스패쳐서블릿) → 컨트롤러
- 서블릿 필터 제한 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 //로그인 사용자
HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) //비 로그인 사용자 - 서블릿 필터 체인 = HTTP 요청 → WAS → 필터1 → 필터2 → 필터3 → 서블릿(디스패쳐서블릿) → 컨트롤러
- 필터 인터페이스가 있는데, 싱글톤으로 생성되고, init, doFilter, destroy로 구성되어 있다.
- chain.doFilter를 꼭 호출해야 한다. 호출하지 않으면 다음으로 진행되지 않는다.
- 서블릿 필터 - 요청 로그
- 서블릿 필터 - 인증 체크
- 화이트 리스트를 만들어 놓고, 화이트 리스트에 부합하지 않으면 전부다 세션을 체크해서 리다이렉트 했다.
리다이렉트 할 때는 요청 URL을 함께 넘겨줘서 사용자의 편의를 고려했다.
- 화이트 리스트를 만들어 놓고, 화이트 리스트에 부합하지 않으면 전부다 세션을 체크해서 리다이렉트 했다.
- 스프링 인터셉터 - 소개
- 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다.
- 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다.
- 필터와 인터셉터 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다.
- 스프링 인터셉터 흐름 = HTTP 요청 → WAS → 필터 → 서블릿(디스패쳐서블릿) → 스프링 인터셉터 → 컨트롤러
- 스프링 인터셉터 제한 = HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 //로그인 사용자
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터(적절하지 않은 요청이라 판단, 컨트롤러 호출 X) // 비 로그인 사용자 - 스프링 인터셉터 체인 = HTTP 요청 → WAS → 필터 → 서블릿(디스패쳐서블릿) → 스프링 인터셉터 → 컨트롤러
- preHandle : 컨트롤러 호출 전에 호출된다. (핸들러 어댑터 호출 전에 호출)
- postHandle : 컨트롤러 호출 후에 호출된다. (핸들러 어댑터 호출 후에 호출) # 예외 발생시 호출 X
- afterCompletion : 뷰가 렌더링 된 이후에 호출 # 예외와 무관하게 호출O + 예외정보ex포함
- 스프링 인터셉터 - 요청 로그
- HandlerMethod
- 핸들러 정보는 어떤 핸들러 매핑을 사용하는가에 따라 달라진다. 스프링을 사용하면 일반적으로 @Controller, @RequestMapping을 활용한 핸들러 매핑을 사용하는데, 이 경우 HandlerMethod타입으로 넘어온다.
- ResourceHttpRequestHandler
- @Controller가 아니라 /resources/static 와 같은 정적 리소스가 호출되는 경우,
ResourceHttpRequestHandler타입이 핸들러 정보로 넘어오기 때문에 타입에 따라서 처리가 필요.
- @Controller가 아니라 /resources/static 와 같은 정적 리소스가 호출되는 경우,
- HandlerMethod
- 스프링 인터셉터 - 인증 체크
- addPathPatterns
- excludePathPatterns 등 정밀하게 적용할 수 있다.
- ArgumentResolver 활용
- 간단하게 @Login 어노테이션을 만들어 놓고 Login된 사용자의 정보를 얻는 것을 간단하게 할 수 있다.
- 정리
반응형
'Spring' 카테고리의 다른 글
스프링 MVC 2 - 서블릿 예외 처리 - 시작 (0) | 2022.09.26 |
---|---|
스프링 MVC 2 - 프로젝트 생성(예외 처리와 오류 페이지) (0) | 2022.09.26 |
스프링 MVC 2 - ArgumentResolver 활용 (0) | 2022.09.23 |
스프링 MVC 2 - 스프링 인터셉터 - 인증 체크 (0) | 2022.09.23 |
스프링 MVC 2 - 스프링 인터셉터 - 요청 로그 (0) | 2022.09.23 |
댓글
이 글 공유하기
다른 글
-
스프링 MVC 2 - 서블릿 예외 처리 - 시작
스프링 MVC 2 - 서블릿 예외 처리 - 시작
2022.09.26 -
스프링 MVC 2 - 프로젝트 생성(예외 처리와 오류 페이지)
스프링 MVC 2 - 프로젝트 생성(예외 처리와 오류 페이지)
2022.09.26 -
스프링 MVC 2 - ArgumentResolver 활용
스프링 MVC 2 - ArgumentResolver 활용
2022.09.23 -
스프링 MVC 2 - 스프링 인터셉터 - 인증 체크
스프링 MVC 2 - 스프링 인터셉터 - 인증 체크
2022.09.23