Python 官方文档:入门教程 => 点击学习
目录过滤器的方式拦截器的方式三种方式 下面为大家一一对应 过滤器的方式拦截器的方式 过滤器的方式 这种方式简单点 但是可配置性不高 注意:一定得扫描到spring容器中 创建一个类
三种方式 下面为大家一一对应
这种方式简单点 但是可配置性不高
创建一个类 实现 filter接口
<u>预处理</u>
。其中FilterChain可以将处理后的
request和response对象传递到过滤链上的下一个资源。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);
}
}
结果
1.过滤器用来实现通用的功能,减少代码冗余,提高可维护性;
2.一个过滤器可以配置给多个资源使用(编码过滤器);
3.一个资源也可以配置多个过滤器,按照配置顺序调用。
如果不懂 请先看了 介绍再来
拦截器的介绍
话不说多 直接上代码
创建拦截器
@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);
}
}
注册拦截器
把我们的拦截器 注册到 拦截器链中
@Configuration
public class springMVCConfig implements WEBmvcConfigurer {
@Resource
private LogInterceptor logInterceptor;
@Override
public void addInterceptors(InterceptorReGIStry registry) {
registry
.addInterceptor(logInterceptor)
.addPathPatterns("/**")// 对那些接口拦截
.excludePathPatterns("/login");// 对哪些接机口放行
WebMvcConfigurer.super.addInterceptors(registry);
}
}
测试结果
以上就是SpringBoot实现过滤器拦截器的耗时对比的详细内容,更多关于SpringBoot过滤器拦截器的资料请关注编程网其它相关文章!
--结束END--
本文标题: SpringBoot实现过滤器拦截器的耗时对比
本文链接: https://lsjlt.com/news/152757.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0