>  기사  >  Java  >  Java 필터와 인터셉터를 구현하는 방법은 무엇입니까?

Java 필터와 인터셉터를 구현하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-05-10 08:10:121373검색

1. 필터와 인터셉터의 유사점

1. 인터셉터와 필터는 모두 AOP의 아이디어를 구현하며 둘 다 메서드 구현을 향상하여 요청 메서드를 가로챌 수 있습니다.

2. 인터셉터와 필터 모두 Order 주석을 통해 실행 순서를 설정할 수 있습니다

2. 필터와 인터셉터의 차이점

Java 웹 개발에서 필터(Filter)와 인터셉터(Interceptor)는 둘 다 처리를 위한 공통 구성 요소입니다. 요청과 응답. 주요 차이점은 다음과 같습니다.

  • 다른 실행 위치: 필터는 웹 서버와 서블릿 컨테이너 사이에서 실행되는 구성 요소이며 인터셉터가 특정 대상을 대상으로 하는 동안 컨테이너 안팎의 모든 요청과 응답을 가로챌 수 있습니다. 가로채기 처리를 수행하는 컨트롤러 메서드는 컨트롤러 내에서만 실행됩니다.

  • 실행 순서가 다릅니다. 필터의 실행 순서는 web.xml 파일에 선언된 순서에 따라 결정되며, 인터셉터의 실행 순서는 선언된 순서에 따라 실행됩니다. 구성 파일의 선언에서 순서에 따라 결정됩니다. 즉, 인터셉터가 순서를 지정할 수 있습니다.

  • 기능은 다릅니다. 필터는 주로 문자 집합 설정, 로그인 확인, 로깅 등과 같은 요청을 전처리하고 필터링하는 데 사용되는 반면, 인터셉터는 주로 권한 확인, 매개변수 주입과 같은 요청을 처리하는 데 사용됩니다. , 예외 처리 및 기타 작업.

  • 다양한 프레임워크에 따라: 필터는 서블릿 사양을 기반으로 구현되며 특정 프레임워크에 의존하지 않지만 인터셉터는 일반적으로 Spring MVC 프레임워크의 인터셉터와 같은 특정 프레임워크 또는 라이브러리에 대해 구현됩니다.

요약하자면, 필터와 인터셉터는 구현 방법, 기능 및 사용 시나리오에서 일정한 차이가 있습니다. 개발자는 특정 요구에 따라 적합한 구성 요소를 선택할 수 있습니다.

3. 필터 및 인터셉터 구현

  • 필터 web.xml에서 웹 레이어 구성

Java 웹 개발에서 필터는 주로 요청을 전처리하고 필터링하는 데 사용됩니다. javax.servlet.Filter 인터페이스를 구현합니다. 구체적인 단계는 다음과 같습니다.

Java 클래스를 생성하고 javax.servlet.Filter 인터페이스를 구현하고 doFilter() 메서드를 구현합니다.

javaCopy 코드 public class MyFilter Implements Filter { public void init(FilterConfig config) throws ServletException { // 필터 초기화 작업 }

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    // 过滤器处理逻辑
    // 对request和response进行预处理
    // 调用chain.doFilter()方法,将请求传递给下一个过滤器或Servlet
    chain.doFilter(request, response);
    // 对response进行后处理
}
public void destroy() {
    // 过滤器销毁操作
}
  • web.xml 파일에 필터를 선언하고 URL 패턴을 지정합니다.

  • xmlCopy 코드 myFilter com.example.MyFilter myFilter /*

위 코드에서 filter-name은 필터의 이름을 지정하고, filter-class는 필터의 구현 클래스를 지정합니다. 필터가 가로챌 URL 패턴, /*는 모든 요청을 가로채는 것을 의미합니다.

  • 웹 애플리케이션을 재배포하고 서버를 시작한 다음 이 필터를 사용하여 요청을 전처리하고 필터링합니다.

필터를 구현할 때 FilterConfig 개체를 통해 초기화 매개변수, ServletContext 및 기타 정보를 얻어 더욱 세련된 필터링을 구현할 수 있다는 점에 유의해야 합니다. 동시에 doFilter() 메소드에서는 FilterChain 객체의 doFilter() 메소드를 호출하여 요청을 다음 필터나 서블릿으로 전달해야 하며, 그렇지 않으면 요청이 차단되어 정상적으로 처리될 수 없습니다.

  • springmvc에서 액션 레이어(servlet과 컨트롤러 사이)를 구성하여 HandlerInterceptor 인터페이스를 구현하여 사용자 정의 인터셉터를 생성합니다. 구체적인 단계는 다음과 같습니다.

    Java 클래스를 생성하고, HandlerInterceptor 인터페이스를 구현하고, preHandle(), postHandle() 및 afterCompletion()의 세 가지 메서드를 다시 작성합니다.
javaCopy 코드 public class MyInterceptor Implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 컨트롤러 메서드가 실행되기 전에 호출되며 true를 반환하면 후속 인터셉터 및 컨트롤러 메서드를 계속 실행한다는 의미입니다. 후속 인터셉터 및 컨트롤러 메서드의 실행을 중지하는 것을 의미합니다. return true; }

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    // 在控制器方法执行之后、视图渲染之前被调用,可以对模型数据进行修改或查看。
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
        Exception ex) throws Exception {
    // 整个请求完成之后被调用,可以用于清理资源等工作。
}

Spring MVC 구성 파일에서 인터셉터를 선언하고 차단 경로를 지정합니다.

  • xml코드 복사 mvc:interceptors 8b647e1a51343ebb13528c2233a5023e

  • 위 XML 구성에서 MyInterceptor는 사용자 정의 인터셉터 클래스 이름입니다. Spring MVC 구성 파일에 인터셉터를 등록하면 인터셉터의 차단 경로를 통과하는 모든 요청을 차단하여 그에 따라 처리합니다.

    인터셉터를 구현할 때 세련된 가로채기 처리를 달성하기 위해 필요에 따라 다시 작성해야 하는 메서드를 선택할 수 있다는 점에 유의해야 합니다. 동시에 preHandle() 메서드에서는 후속 인터셉터 및 컨트롤러 메서드를 계속 실행할지 여부를 나타내는 부울 유형 결과를 반환해야 합니다. false가 반환되면 요청이 중지되고 실행이 계속되지 않습니다.
4. 필터와 인터셉터 관련 면접 질문

1. 필터와 인터셉터의 차이점은 무엇인가요?

Filter는 서블릿 컨테이너에서 요청을 전처리하고 필터링하는 데 사용되는 구성 요소로 필터링, 확인, 압축 및 기타 기능을 구현할 수 있습니다. 인터셉터(Interceptor)는 Spring MVC 프레임워크에서 요청을 가로채서 처리하는 데 사용되는 컴포넌트로 권한 확인, 로깅, 예외 처리 등의 기능을 구현할 수 있습니다. 필터는 서블릿 컨테이너에서 실행되는 반면 인터셉터는 Spring MVC 프레임워크에서 실행됩니다.

2. 필터와 인터셉터의 실행 순서는 어떻게 되나요?

Java 웹 애플리케이션에서 필터와 인터셉터의 실행 순서는 구성 파일에 선언된 순서에 따라 결정됩니다. 일반적으로 먼저 선언된 필터나 인터셉터가 먼저 실행되고, 나중에 선언된 필터나 인터셉터가 나중에 실행됩니다.

3. 필터와 인터셉터의 기능은 무엇인가요?

필터와 인터셉터 모두 요청을 처리 및 제어하고 요청 필터링, 인증, 데이터 암호화, 로깅 등과 같은 일련의 기능을 구현할 수 있습니다. 필터는 주로 요청을 전처리하고 필터링하는 데 사용되는 반면 인터셉터는 주로 컨트롤러 메서드가 실행되기 전이나 후에 요청을 가로채고 처리하는 데 사용됩니다.

4. 필터와 인터셉터의 사용 시나리오는 무엇입니까?

필터와 인터셉터 모두 일련의 제어 및 관리 기능을 구현하는 데 사용될 수 있습니다. 예를 들어 필터는 ID 인증, 데이터 암호화 및 암호 해독, 요청 필터링 및 압축과 같은 시나리오에 사용될 수 있으며 인터셉터는 권한 확인, 로깅 및 예외 처리와 같은 시나리오에 사용될 수 있습니다.

5. Java 웹 애플리케이션에서 필터와 인터셉터를 사용하는 방법은 무엇입니까?

Java 웹 애플리케이션에서 필터와 인터셉터를 사용하려면 구성 파일에 선언하고 등록해야 합니다. 필터의 경우 web.xml 파일에 및 태그를 추가하여 수행할 수 있으며 인터셉터의 경우 Spring MVC 구성 파일에 mvc:interceptors 태그를 추가하여 수행할 수 있습니다. 동시에 필터와 인터셉터를 선언하고 등록할 때 실행 순서와 차단 경로 및 기타 관련 정보도 지정해야 합니다.

위 내용은 Java 필터와 인터셉터를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제