Rumah >Java >javaTutorial >Analisis perbandingan contoh memakan masa pelaksanaan SpringBoot pemintas penapis

Analisis perbandingan contoh memakan masa pelaksanaan SpringBoot pemintas penapis

WBOY
WBOYke hadapan
2023-05-12 09:43:131741semak imbas

Kaedah penapis

Kaedah ini lebih mudah tetapi tidak begitu boleh dikonfigurasikan

Nota: mesti diimbas ke dalam bekas spring

Buat kelas untuk laksanakan antara muka penapis

  • init: Kaedah ini ialah kaedah untuk memulakan objek penapis Ia hanya dipanggil sekali selepas bekas itu memulakan objek penapis parameter;

  • doFilter: boleh melaksanakan <u>预处理</u> atas permintaan dan respons. 其中FilterChain可以将处理后的Objek permintaan dan respons dihantar ke sumber seterusnya dalam rantaian penapisan.

  • destroy(): Kaedah ini dipanggil sebelum bekas memusnahkan objek.

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);
    }
}

Hasil

Analisis perbandingan contoh memakan masa pelaksanaan SpringBoot pemintas penapis

Ringkasan

1. meningkatkan kebolehselenggaraan;

2. Satu penapis boleh dikonfigurasikan untuk berbilang sumber (penapis pengekodan

3.

Kaedah pemintas

Jika anda tidak faham, sila baca pengenalan dahulu sebelum kembali

Pengenalan kepada pemintas

Pergi terus ke kod tanpa lebih lanjut

Buat pemintas

/**
 * 拦截器: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);
     }
}

Daftar pemintas

Daftarkan pemintas kami ke dalam rantai pemintas

/**
 * @author : look-word
 * 2022-06-26 14:03
 **/
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {

    @Resource
    private LogInterceptor logInterceptor;
    /**
     * 注册拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry
                .addInterceptor(logInterceptor)
                .addPathPatterns("/**")// 对那些接口拦截
                .excludePathPatterns("/login");// 对哪些接机口放行
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

rrreee >Keputusan ujian

Analisis perbandingan contoh memakan masa pelaksanaan SpringBoot pemintas penapis

Atas ialah kandungan terperinci Analisis perbandingan contoh memakan masa pelaksanaan SpringBoot pemintas penapis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam