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
Ringkasan
1. meningkatkan kebolehselenggaraan;
2. Satu penapis boleh dikonfigurasikan untuk berbilang sumber (penapis pengekodan
3.
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
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!