>  기사  >  Java  >  Java의 인터셉터 예제에 대한 자세한 설명

Java의 인터셉터 예제에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-10 10:32:582732검색

본 글은 주로 스프링부트 인터셉터의 간단한 사용예제 코드를 소개하고 있으니 필요한 친구들은 참고하시면 됩니다

1. 기본 스프링부트 인터셉터는

HandlerInterceptorAdapter
AbstractHandlerMapping
UserRoleAuthorizationInterceptor
LocaleChangeInterceptor
ThemeChangeInterceptor

LocaleChangeInterceptor와 ThemeChangeInterceptor가 더 일반적으로 사용됩니다.

2. 사용자 정의 인터셉터를 구현하려면 3단계만 필요합니다.

1) 자체 인터셉터 클래스를 만들고 HandlerInterceptor 인터페이스를 구현합니다. .

2) Java 클래스를 생성하고 WebMvcConfigurerAdapter를 상속하고 addInterceptors 메서드를 재정의합니다.

3) 사용자 정의 인터셉터를 인스턴스화한 다음 해당 객체를 인터셉터 체인(addInterceptors 메소드에 추가됨)에 수동으로 추가합니다.

3. 코드 예시

IndexInterceptor.java 클래스 코드:

package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class IndexInterceptor implements HandlerInterceptor{
  @Override
  public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
  }
  @Override
  public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
  }
  @Override
  public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
     System.out.println(">>>IndexInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
     // 只有返回true才会继续向下执行,返回false取消当前请求
     return true;
  }
}

IndexInterceptor2.java 클래스 코드:

package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class IndexInterceptor2 implements HandlerInterceptor{
  @Override
  public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor2>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
  }
  @Override
  public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor2>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
  }
  @Override
  public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
     System.out.println(">>>IndexInterceptor2>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
     // 只有返回true才会继续向下执行,返回false取消当前请求
     return false;
  }
}

SimpleWebAppConfigurer.java 클래스 코드:

package com.example.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.example.interceptor.IndexInterceptor;
import com.example.interceptor.IndexInterceptor2;
//只要能被springboot扫描到即可
@Configuration
public class SimpleWebAppConfigurer extends WebMvcConfigurerAdapter{
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 多个拦截器组成一个拦截器链
    // addPathPatterns 用于添加拦截规则
    // excludePathPatterns 用户排除拦截
    registry.addInterceptor(new IndexInterceptor()).addPathPatterns("/**");
    registry.addInterceptor(new IndexInterceptor2()).addPathPatterns("/**");
    super.addInterceptors(registry);
  }
}

4. 인터셉터 구문 분석 지침

preHandle**: 전처리 콜백 메서드, 프로세서 구현 전처리(예: 로그인 확인), 세 번째 매개변수는 응답 프로세서(예: 이전 장의 컨트롤러 구현)입니다.

반환 값: true는 프로세스를 계속하는 것을 의미합니다(예: 다음 인터셉터 호출 또는 processor)

false는 프로세스가 중단되고(예: 로그인 확인 실패) 이때 응답을 통해 응답을 생성해야 함을 의미합니다. 🎜>

postHandle**: 프로세서의 후처리를 구현하기 위한 후처리 콜백 메서드(단, 뷰를 렌더링하기 전) 이때 modelAndView(

Model

및 ViewObject) 모델 데이터가 처리되거나 뷰가 처리되는 경우 modelAndView도 null일 수 있습니다. afterCompletion**: 전체 요청이 처리된 후 콜백 메소드, 즉 뷰가 렌더링될 때 콜백됩니다. 예를 들어 성능 모니터링에서 종료 시간을 기록하고 여기에 소비 시간을 출력할 수 있습니다. try-catch-finally의 finally와 유사하게 일부 리소스 정리를 수행할 수도 있지만 프로세서 실행 체인에서 preHandle이 true를 반환하는 인터셉터의 afterCompletion**만 호출합니다.

[관련 추천]

1.

Java 무료 동영상 튜토리얼

Java 주석 종합 분석

3. FastJson 튜토리얼 매뉴얼

위 내용은 Java의 인터셉터 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.