Spring Interceptor vs Filter 차단기 와 필터 의 차이
7340 단어 SpringinterceptorfilterJava
Spring 의 interceptor 와 filter 를 소개 하 는 글 을 전재 합 니 다.http://einverne.github.io/post/2017/08/spring-interceptor-vs-filter.html。
이 글 은 말 을 잘 하 는 것 같 아서 깊이 이해 하고 분석 해 야 한다.
본문
Spring Interceptor vs Filter 차단기 와 필터 의 차이
Posted on 08/14/2017 by Ein Verne | View revision history
Spring 의 Interceptor (차단기) 는 Servlet 의 Filter 와 비슷 한 점 이 있어 권한 검사, 로그 기록 등 을 실현 할 수 있다.다른 것 은:
Filter
Interceptor
Summary
Filter 인 터 페 이 스 는 javax. servlet 패키지 에 정의 되 어 있 습 니 다.
인터페이스 Handler Interceptor 는 org. springframework. web. servlet 패키지 에 정 의 됩 니 다.
Filter 정 의 는 웹. xml 에 있 습 니 다.
Filter 는 Servlet 전후 에 만 작 동 합 니 다.Filters 는 보통 요청 과 응답 (request / response) 을 블랙박스 로 하고 Filter 는 servlet 의 실현 을 고려 하지 않 습 니 다.
차단 기 는 방법 전후, 이상 투 출 전후 등 으로 깊이 들 어 갈 수 있 기 때문에 차단기 의 사용 은 더욱 탄력 이 있다.사용자 가 (hook into) 요청 의 수명 주기 에 개입 할 수 있 도록 요청 과정 에서 정 보 를 얻 을 수 있 습 니 다. Interceptor 는 보통 요청 과 더욱 결합 합 니 다.
Spring 프레임 워 크 프로그램 에 서 는 차단 기 를 우선 사용 해 야 합 니 다.거의 모든 Filter 가 할 수 있 는 일, interceptor 가 쉽게 이 루어 집 니 다.
Filter 는 Servlet 규범 에 규정된 것 이다.
차단 기 는 웹 프로그램 뿐만 아니 라 애플 리 케 이 션, 스윙 프로그램 에 도 사용 할 수 있다.
사용 범위 가 다르다
Filter 는 Servlet 규범 에서 정 의 된 것 으로 Servlet 용기 가 지원 합 니 다.
차단 기 는 Spring 용기 안에 있 고 Spring 프레임 워 크 가 지원 합 니 다.
규범 이 다르다
Filter 는 Spring 용기 자원 을 사용 할 수 없습니다.
차단 기 는 Spring 의 구성 요소 로 Spring 관리 로 Spring 파일 에 설정 되 어 있 기 때문에 Spring 의 모든 자원, 대상 을 사용 할 수 있 습 니 다. 예 를 들 어 Service 대상, 데이터 소스, 사무 관리 등 은 IoC 를 통 해 차단기 에 주입 하면 됩 니 다.
Spring 에 서 는 interceptor 를 사용 하 는 것 이 더 쉽다.
Filter 는 Server (like Tomcat) 에서 호출 됩 니 다.
Interceptor 는 Spring 에 의 해 호출 되 었 습 니 다.
따라서 Filter 는 항상 Interceptor 보다 우선 합 니 다.
interceptor 사용
interceptor 의 실행 순 서 는 다음 과 같 습 니 다.
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class ExecuteTimeInterceptor extends HandlerInterceptorAdapter{
private static final Logger logger = Logger.getLogger(ExecuteTimeInterceptor.class);
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
long startTime = System.currentTimeMillis();
request.setAttribute("startTime", startTime);
return true;
}
//after the handler is executed
public void postHandle(
HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView)
throws Exception {
long startTime = (Long)request.getAttribute("startTime");
long endTime = System.currentTimeMillis();
long executeTime = endTime - startTime;
//modified the exisitng modelAndView
modelAndView.addObject("executeTime",executeTime);
//log it
if(logger.isDebugEnabled()){
logger.debug("[" + handler + "] executeTime : " + executeTime + "ms");
}
}
}
예시 원본 mkyong
화면 음악: interceptors 탭 을 사용 하여 SpringMVC 차단기 체인 에 가입 해 야 하 는 차단 기 를 설명 합 니 다.
화면 음악: interceptors 라벨 을 이용 하여 일련의 차단 기 를 설명 한 다음 에 차단기 체인 을 형성 할 수 있 습 니 다. 차단기 의 실행 순 서 는 성명 의 선착순 으로 실 행 됩 니 다. 먼저 설명 한 차단기 중의 preHandle 방법 은 먼저 실 행 됩 니 다. 그러나 post Handle 방법 과 after Complete 방법 은 나중에 실 행 됩 니 다.
화면 음악 c: interceptors 태그 에서 interceptor 는 주로 두 가지 방식 이 있 습 니 다.
상기 두 단 계 를 거 친 후에 정 의 된 차단기 가 작용 하여 특정한 요청 을 차단 할 것 이다.
필터 사용
Servlet 의 Filter 인 터 페 이 스 는 다음 과 같은 방법 이 필요 합 니 다.
void init(FilterConfig paramFilterConfig)
– 용기 가 Filter 를 초기 화 할 때 호출 됩 니 다. 이 방법 은 Filter 의 수명 주기 에 한 번 만 호출 됩 니 다. 일반적으로 이 방법 에서 일부 자원 을 초기 화 합 니 다. Filter Config 는 용기 가 Filter 에 제공 하 는 초기 화 매개 변수 입 니 다. 이 방법 에서 ServletException 을 던 질 수 있 습 니 다.init 방법 은 성공 적 으로 실행 되 어야 합 니 다. 그렇지 않 으 면 Filter 가 작 동 하지 않 을 수 있 습 니 다. 다음 두 가지 상황 이 발생 했 을 때 웹 용기 에서 Filter 는 유효 하지 않 을 수 있 습 니 다. 1) ServletException 2 를 던 져 웹 용기 가 정의 한 실행 시간 을 초과 할 수 있 습 니 다.doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain)
– 웹 용 기 는 요청 할 때마다 이 방법 을 호출 합 니 다.이 방법 은 용기 의 요청 과 응답 을 매개 변수 로 전달 하고 FilterChain 은 다음 Filter 를 호출 합 니 다.void destroy()
– 용기 가 Filter 인 스 턴 스 를 없 앨 때 이 방법 을 사용 하면 방법 에서 자원 을 없 앨 수 있 습 니 다. 이 방법 은 Filter 의 수명 주기 에 한 번 만 호출 됩 니 다.FrequencyLimitFilter com.company.filter.FrequencyLimitFilter FrequencyLimitFilter /login/* Filter 와 Interceptor 의 용도
Request Filters 가능:
https://stackoverflow.com/a/8006315/1820217 ↩
개인
그리고 몇 편의 댓 글 을 참고 할 수 있 습 니 다.
1. https://www.baeldung.com/jersey-filters-interceptors이 사이트 의 내용 은 모두 매우 좋다.
개인의 일부 인지, interceptor 의 개념 은 struts 가 도입 한 것 같 았 고 나중에 Spring 은 struts 를 참고 하여 스스로 이 기능 을 실현 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.