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

Analisis perbandingan contoh memakan masa pelaksanaan SpringBoot pemintas penapis

WBOY
Lepaskan: 2023-05-12 09:43:13
ke hadapan
1688 orang telah melayarinya

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);
    }
}
Salin selepas log masuk

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);
     }
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan