본 글은 주로 스프링부트 인터셉터의 간단한 사용예제 코드를 소개하고 있으니 필요한 친구들은 참고하시면 됩니다
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; } }
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; } }
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 무료 동영상 튜토리얼
3. FastJson 튜토리얼 매뉴얼
위 내용은 Java의 인터셉터 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!