SpringMVC 차단기 의 사용 방법 을 간단하게 정리 하 다.
차단 기 는 Filter 필터 와 유사 합 니 다.springMVC 특유 의 것 입 니 다.미리 처리 하고 나중에 처리 할 수 있 습 니 다.차단 기 를 정의 하여 특정한 업 무 를 수행 할 수 있 습 니 다.
필터 와 차단기 의 본질 차이:
(1)차단기 시 AOP 사상의 구체 적 인 응용(횡단면,요청 응답 에 직접 자 르 기).
(2)차단기 시 spring MVC 특유 의.
(3)차단 기 는 컨트롤 러 에 접근 하 는 방법 만 차단 합 니 다.예 를 들 어'jsp/html/css/image/js'와 같은 정적 자원 에 접근 하면 차단 하지 않 고 Filter 필 터 는 무엇이든 차단 합 니 다.
사용자 정의 차단기 두 단계 필요:
첫 번 째 단계:사용자 정의 클래스 작성 HandlerInterceptor 인터페이스,그리고 방법 을 다시 써 야 합 니 다.
두 번 째 단계:설정 클래스 에서 차단 기 를 등록 하여 실현 합 니 다. WebMvcConfigurer 인터페이스,대응 하 는 방법 다시 쓰기;설정 클래스 에 대하 여 나 는 이 글 에 기록 되 어 있다.
(1)public boolean preHandle() {}
전처리 요청 논리-선행.
방법 반환 값:불 값 을 되 돌려 주 고 true 를 되 돌려 주 며 후속 코드 를 실행 할 수 있 음 을 표시 합 니 다.false 프로그램 으로 돌아 가면 종 료 됩 니 다.
(2)public void postHandle(){}
전처리 의 논리-백 엔 드 에 응답 하 십시오.
방법 반환 값:반환 값 이 없습니다.
디 렉 터 리:
package com.lxc.springboot.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@Component
public class MyInterceptor implements HandlerInterceptor {
private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
s
//
System.out.println("----------- -----------");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//
System.out.println("------------ ------------");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//
}
}
등록 차단기:
package com.lxc.springboot.config;
import com.lxc.springboot.intercetor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
/**
* @ springMVC
* :
* @Configuration :
* :
* WebMvcConfigurer
*/
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
@Resource
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addInterceptor(): ,
// addPathPatterns(): , ,/**
// excludePathPatterns(): ,
registry.addInterceptor(myInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login");
}
}
작은 예
Filter 와 마찬가지 로 인터페이스의 요청 응답 시간 을 기록 합 니 다.
package com.lxc.springboot.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* , :
*
* 【【【【 : , config ! 】】】】
*
* (1) spring , 、 、 。
* (2) , , , ,
* (3) , , filterChain.doFilter() !
* (4) preHandle , true, , !
*/
@Component // , spring
public class LogInterceptor implements HandlerInterceptor {
private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
LOG.info("【 】");
LOG.info("*********** InterceptorLog *********** ");
LOG.info("* : {}, : {}", request.getRequestURL().toString(), request.getMethod());
LOG.info("* : {}, : {}, : {}", request.getRemoteAddr(), request.getRemoteHost(), request.getRemotePort());
long startTime = System.currentTimeMillis();
request.setAttribute("boot-responseTime", startTime);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// request.getAttribute("boot-responseTime") Object
long startTimed = (long) request.getAttribute("boot-responseTime");
LOG.info(" *********** InterceptorLog , : {} ms *********** ", System.currentTimeMillis() - startTimed);
}
}
설정 클래스 에 차단 기 를 등록 합 니 다:
package com.lxc.springboot.config;
import com.lxc.springboot.intercetor.LogInterceptor;
import com.lxc.springboot.intercetor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
@Resource
private MyInterceptor myInterceptor;
@Resource
private LogInterceptor logInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login");
}
}
테스트:SpringMVC 차단기 의 사용법 을 간단하게 정리 한 이 글 은 여기까지 입 니 다.SpringMVC 차단기 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ssm 프레임워크 업로드 이미지 로컬 및 데이터베이스에 저장 예시본고는 ssm 프레임워크 업로드 이미지를 로컬과 데이터베이스에 저장하는 예시를 소개하고 주로 Spring+SpringMVC+MyBatis 프레임워크를 사용하여 ssm 프레임워크 업로드 이미지의 실례를 실현했다. 구체...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.