Heim >Java >javaLernprogramm >Vergleichende Analyse zeitaufwändiger Beispiele für die SpringBoot-Implementierung von Filter-Interceptoren

Vergleichende Analyse zeitaufwändiger Beispiele für die SpringBoot-Implementierung von Filter-Interceptoren

WBOY
WBOYnach vorne
2023-05-12 09:43:131741Durchsuche

Filtermethode

Diese Methode ist einfacher, aber nicht sehr konfigurierbar.

Hinweis: Muss in den Federcontainer gescannt werden Die Methode wird nur einmal aufgerufen, nachdem der Container das Filterobjekt initialisiert hat.

    doFilter: kann Anforderung und Antwort ausführen.
  • Die Anforderungs- und Antwortobjekte werden an die Filterkette übergeben Ressource.

  • destroy(): Diese Methode wird aufgerufen, bevor der Container das Objekt zerstört.

    <u>预处理</u>其中FilterChain可以将处理后的

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    
    @Component
    public class LogFilter implements Filter {
    
        private static final Logger LOG = LoggerFactory.getLogger(LogFilter.class);
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            // 打印请求信息
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            LOG.info("------------- LogFilter 开始 -------------");
            LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
            LOG.info("远程地址: {}", request.getRemoteAddr());
    
            long startTime = System.currentTimeMillis();
            filterChain.doFilter(servletRequest, servletResponse);
            LOG.info("------------- LogFilter 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
        }
    }
  • Ergebnisse
Zusammenfassung

1. Filter werden verwendet, um allgemeine Funktionen zu implementieren, Coderedundanz zu reduzieren und die Wartbarkeit zu verbessern.

Vergleichende Analyse zeitaufwändiger Beispiele für die SpringBoot-Implementierung von Filter-Interceptoren2.

3. Eine Ressource kann auch mit mehreren Filtern konfiguriert werden, die in der Reihenfolge der Konfiguration aufgerufen werden.

Wie funktioniert Interceptor? Wenn Sie es nicht verstehen, lesen Sie bitte zuerst die Einführung und kommen Sie dann zurück Registrieren Sie einen Interceptor

Unser Interceptor ist in der Interceptor-Kette registriert

/**
 * 拦截器:Spring框架特有的,常用于登录校验,权限校验,请求日志打印 /login
 * @author : look-word
 * 2022-06-26 13:55
 **/
@Component
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("------------- LogInterceptor 开始 -------------");
         LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
         LOG.info("远程地址: {}", request.getRemoteAddr());

         long startTime = System.currentTimeMillis();
         request.setAttribute("requestStartTime", startTime);
         return true;
     }

     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
         long startTime = (Long) request.getAttribute("requestStartTime");
         LOG.info("------------- LogInterceptor 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
     }
}

Testergebnisse

Das obige ist der detaillierte Inhalt vonVergleichende Analyse zeitaufwändiger Beispiele für die SpringBoot-Implementierung von Filter-Interceptoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen