preHandle: 전처리, 대상 컨트롤러 메서드가 실행되기 전에 처리됨
postHandle: 대상 컨트롤러 메서드가 실행된 후 지정된 페이지에 도달하기 전에 처리됨
afterCompletion: 페이지에서 렌더링됨 그런 다음 처리합니다
방법:
1. Springboot는 HandlerInterceptor 인터페이스를 구현하여 인터셉터를 구현합니다.
2. WebMvcConfigurer를 통해 구성 클래스를 구현한 다음 @Configuration 주석을 통해 컨테이너에 주입합니다. 3. 차단 규칙 지정
사용자 로그인을 예로 들어보겠습니다. 사용자가 로그인하지 않은 경우 세션에 사용자 데이터가 없으며 사용자는 올바르게 로그인한 후 홈페이지 로그인 페이지로 리디렉션됩니다. , 페이지를 다시 방문하면 로그인하십시오. 인터셉터는 이 relister 객체를 찾을 수 있으며 로그인 인터페이스를 다시 인터셉트할 필요가 없습니다.
package com.zwz.springbootweb.interceptor; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.websocket.Session; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); Object reglister = session.getAttribute("Reglister"); if (reglister != null) { return true; } else { request.setAttribute("msg", "请先登录!"); request.getRequestDispatcher("/").forward(request,response); return false; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
그런 다음 구성을 구현하십시오. WebMvcConfigurer 인터페이스를 구현하여 클래스를 구성하고 마지막으로 @Configuration 주석 주입 구성을 전달합니다. 그리고 차단된 경로와 해제해야 하는 경로를 지정합니다.
Interceptor /**는 모든 것을 차단합니다. 정적 리소스를 포함한 리소스, 정적 리소스를 해제해야 합니다package com.zwz.springbootweb.config; import com.zwz.springbootweb.interceptor.LoginInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.HiddenHttpMethodFilter; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.util.UrlPathHelper; @Configuration public class WebConfig implements WebMvcConfigurer{ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/loginjudge","/","/retolo","/static/**"); } }
인터셉터 응용 시나리오
1 로깅: 정보 모니터링, 정보 통계, PV 계산을 위한 요청 정보 로그를 기록합니다(페이지 보기). , 등.
2. 권한 확인: 로그인 감지와 같이 로그인 페이지로 직접 돌아가지 않는 경우 프로세서에 들어가 로그인 여부를 감지합니다.3. 성능 모니터링: 때때로 특정 기간 동안 시스템이 설명할 수 없을 정도로 느려집니다. 시간, 인터셉터를 사용하여 프로세서에 들어가기 전 시작 시간을 기록하고, 처리 후 종료 시간을 기록하여 요청 처리 시간을 얻을 수 있습니다(아파치와 같은 역방향 프록시가 있는 경우 자동으로 기록될 수 있음).
4. 일반적인 동작: 쿠키를 읽어 사용자 정보를 얻고 후속 프로세스를 용이하게 하기 위해 요청에 사용자 개체를 넣을 뿐만 아니라 여러 프로세서에서 필요한 경우 로케일 및 테마 정보 등을 추출할 수 있습니다. 인터셉터를 사용하여 구현하십시오. 5. OpenSessionInView: Hibernate와 마찬가지로 프로세서 진입 후 SESSION을 열고 완료 후 SESSION을 닫습니다.
인터셉터와 필터의 차이점1. 인터셉터는 Java의 반사 메커니즘을 기반으로 하는 반면 필터는 함수 콜백을 기반으로 합니다.
2. 인터셉터는 서블릿 컨테이너에 의존하지 않지만 필터는 서블릿 컨테이너에 의존합니다.
3. 인터셉터는 ACTION 요청에만 작동할 수 있는 반면 필터는 거의 모든 요청에 작동할 수 있습니다.
4. 인터셉터는 ACTION 컨텍스트 및 값 스택의 개체에 액세스할 수 있지만 필터는 액세스할 수 없습니다. 5. ACTION의 수명 주기에서 인터셉터는 여러 번 호출할 수 있지만 필터는 컨테이너가 초기화될 때 한 번만 호출할 수 있습니다.
6. 인터셉터는 IOC 컨테이너의 각 Bean을 얻을 수 있지만 필터는 그렇지 않습니다. 이는 인터셉터에 서비스를 주입하여 비즈니스 로직을 호출할 수 있다는 점입니다.
위 내용은 Springboot에서 인터셉터 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!