SpringMVC 차단기 의 사용 방법 을 간단하게 정리 하 다.

6954 단어 SpringMVC차단기
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 차단기 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기