当前位置: 首页 > news >正文

沧州网站建设方案咨询国外企业招聘网站

沧州网站建设方案咨询,国外企业招聘网站,网站建设分录,深圳市住房和建设局红色警示查询在Web应用中,过滤器(Filter)是一个强大的工具,它可以在请求到达目标资源之前或响应返回客户端之前对请求或响应进行拦截和处理。然而,在某些情况下,我们可能希望确保过滤器逻辑在一次完整的HTTP请求中仅执行…

在Web应用中,过滤器(Filter)是一个强大的工具,它可以在请求到达目标资源之前或响应返回客户端之前对请求或响应进行拦截和处理。然而,在某些情况下,我们可能希望确保过滤器逻辑在一次完整的HTTP请求中仅执行一次,即使请求在服务器内部经过了多次转发(forward)或包含多个资源请求。Spring框架的OncePerRequestFilter就是为了满足这一需求而设计的。

一、OncePerRequestFilter 概述

OncePerRequestFilter是Spring提供的一个过滤器基类,它确保了在一次完整的HTTP请求中,无论请求经过多少次内部转发,过滤器的逻辑都只会被执行一次。这对于需要在请求处理之前或之后进行一次性设置或清理资源的场景特别有用。

二、OncePerRequestFilter 的原理

OncePerRequestFilter通过内部使用HttpServletRequest的getAttribute和setAttribute方法,以及一个ThreadLocal变量来跟踪当前请求是否已经被处理过。当请求首次进入过滤器时,OncePerRequestFilter会检查是否已经存在一个与当前请求关联的标记。如果不存在,则执行过滤器的逻辑,并将一个标记与当前请求关联起来;如果已经存在,则直接跳过过滤器的逻辑。

三、OncePerRequestFilter 的使用

要使用OncePerRequestFilter,你需要创建一个类并继承它,然后重写doFilterInternal方法。doFilterInternal方法是实际执行过滤器逻辑的地方。

下面是一个简单的示例,展示了一个自定义的OncePerRequestFilter,它在请求到达目标资源之前记录请求的开始时间,并在响应返回客户端之前记录请求的处理时间:

import org.springframework.web.filter.OncePerRequestFilter;  
import javax.servlet.FilterChain;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import java.io.IOException;  public class TimingFilter extends OncePerRequestFilter {  @Override  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)  throws ServletException, IOException {  // 记录请求开始时间  long startTime = System.currentTimeMillis();  // 继续过滤器链  filterChain.doFilter(request, response);  // 记录请求处理时间  long endTime = System.currentTimeMillis();  long duration = endTime - startTime;  System.out.println("Request took " + duration + " ms to process");  }  
}

四、注册 OncePerRequestFilter

要将自定义的OncePerRequestFilter注册到Spring应用中,你可以使用Java配置或XML配置。在Java配置中,你可以创建一个FilterRegistrationBean的Bean来注册你的过滤器:

import org.springframework.boot.web.servlet.FilterRegistrationBean;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  @Configuration  
public class FilterConfig {  @Bean  public FilterRegistrationBean<TimingFilter> timingFilterRegistration() {  FilterRegistrationBean<TimingFilter> registration = new FilterRegistrationBean<>();  registration.setFilter(new TimingFilter());  registration.addUrlPatterns("/*"); // 设置过滤器拦截的URL模式  return registration;  }  
}

五、总结

OncePerRequestFilter是Spring框架中一个非常有用的工具,它可以帮助你在一次完整的HTTP请求中仅执行一次过滤器的逻辑。通过继承OncePerRequestFilter并重写doFilterInternal方法,你可以轻松地创建自定义的过滤器来处理各种需求。无论是在记录请求处理时间、设置请求属性、进行权限验证等方面,OncePerRequestFilter都能为你提供强大的支持。

参考文献:

  • https://springdoc.cn/spring-onceperrequestfilter/
http://www.yayakq.cn/news/838665/

相关文章:

  • 网站后台建设招聘深圳东门老街
  • 一般网站开发语言大连唐朝网站优化公司
  • 内网是怎么做网站的什么网站找厂做袜子
  • 做样子的网站网页与制作
  • 做网站首选科远网络网站怎么做全站搜索
  • 网站系统制作教程杭州淘策网站开发
  • 什么网站做推广效果好推荐友情链接
  • 重庆建设行业信息网站南昌网站快速排名提升
  • 中国建设网站官方网站企业网站psd模板
  • wordpress虚拟3d网站在网站制作前需要有哪些前期策划工作
  • 怎麽做网站安徽招标投标信息网
  • 一键生成个人网站旅游网站策划
  • 郑州上海做网站的公司武城网站建设公司
  • 做网站需要公司授权嘛世预赛韩国出线了吗
  • 上海嘉定网站建设公司西安汇友网站建设
  • 四川林峰脉建设工程有限公司网站海南人
  • 建立旅游网站的目的怎么注册自己网站吗
  • 做360手机网站万网建站
  • 上海哪家网站建设好wordpress 评级插件
  • 135网站模板中国广播电视总台官网
  • 做微信小程序是不是不用做网站文化建设的中心环节是什么
  • 营销网站建设是什么意思网站迁移到别的服务器要怎么做
  • 如何判断网站被google k如何查询一个网站的icp
  • 什么是企业网站建设dedecms5.7装饰网站模板
  • 黔东南建设厅官方网站青岛网红
  • 管城区-建设局门户网站东莞h5网站制作
  • 贵阳做网站电话山东省建设厅网站是
  • 如何让百度收录自己的网站外贸网站建设 广州
  • 过界女主个人做网站的南通网站建设系统电话
  • 怎样进入网站管理系统剪辑师培训班