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

西安市住房和城乡建设局官网seo分析案例

西安市住房和城乡建设局官网,seo分析案例,建筑工程网点代表什么,做一个公司的网站怎么做呢Spring 过滤器链(Filter Chain)完整示例 核心目标 展示 多个 Filter 组成过滤器链的完整实现,包含 init()、doFilter()、destroy() 全生命周期方法,以及如何通过 FilterRegistrationBean 控制执行顺序。 代码结构 Filter 1&…

Spring 过滤器链(Filter Chain)完整示例


核心目标

展示 多个 Filter 组成过滤器链的完整实现,包含 init()doFilter()destroy() 全生命周期方法,以及如何通过 FilterRegistrationBean 控制执行顺序。


代码结构
  1. Filter 1:记录请求时间(TimingFilter)。
  2. Filter 2:跨域处理(CorsFilter)。
  3. Filter 链配置:通过 FilterRegistrationBean 控制顺序。
  4. 测试 Controller:验证过滤器链执行流程。

完整代码示例

1. Filter 1:记录请求时间
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebFilter // 可选注解(需配合 @ServletComponentScan)
public class TimingFilter implements Filter {private long startTime; // 记录请求开始时间// 初始化方法(Filter 容器启动时调用一次)@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("TimingFilter 初始化完成");// 可读取 Filter 配置参数(如 filterConfig.getInitParameter("key"))}// 核心过滤方法(每个请求触发一次)@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {startTime = System.currentTimeMillis();System.out.println("TimingFilter 前置处理开始");// 继续 Filter 链或 Controllerchain.doFilter(request, response); long endTime = System.currentTimeMillis();System.out.println("TimingFilter 后置处理,总耗时:" + (endTime - startTime) + "ms");}// 销毁方法(应用关闭时调用一次)@Overridepublic void destroy() {System.out.println("TimingFilter 销毁");}
}

2. Filter 2:跨域处理
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;@WebFilter
public class CorsFilter implements Filter {// 初始化方法(Filter 容器启动时调用一次)@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("CorsFilter 初始化完成");}// 核心过滤方法(每个请求触发一次)@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse) response;httpResponse.setHeader("Access-Control-Allow-Origin", "*");httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");System.out.println("CorsFilter 前置处理");chain.doFilter(request, response); // 继续后续处理System.out.println("CorsFilter 后置处理");}// 销毁方法(应用关闭时调用一次)@Overridepublic void destroy() {System.out.println("CorsFilter 销毁");}
}

3. Filter 链配置类
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {// 注册 TimingFilter(顺序1)@Beanpublic FilterRegistrationBean<TimingFilter> timingFilterRegistration() {FilterRegistrationBean<TimingFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new TimingFilter());registration.addUrlPatterns("/*"); // 拦截所有路径registration.setOrder(1); // 优先级最高(数值越小优先级越高)return registration;}// 注册 CorsFilter(顺序2)@Beanpublic FilterRegistrationBean<CorsFilter> corsFilterRegistration() {FilterRegistrationBean<CorsFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new CorsFilter());registration.addUrlPatterns("/*");registration.setOrder(2); // 优先级次之return registration;}
}

4. 测试 Controller
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {@GetMapping("/test")public String test() {System.out.println("Controller 方法执行");return "Hello from Controller!";}
}

5. 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

执行流程与输出结果

访问 /test 接口时,控制台输出如下:

TimingFilter 初始化完成
CorsFilter 初始化完成
// 请求到达时:
TimingFilter 前置处理开始
CorsFilter 前置处理
Controller 方法执行
CorsFilter 后置处理
TimingFilter 后置处理,总耗时:Xms
// 应用关闭时:
CorsFilter 销毁
TimingFilter 销毁

关键流程说明
  1. Filter 链执行顺序

    • 初始化阶段:所有 Filter 的 init() 按注册顺序执行(先 TimingFilterCorsFilter)。
    • 请求处理阶段
      • 前置处理:按 setOrder() 顺序执行(TimingFilter 先于 CorsFilter)。
      • 后置处理:按逆序执行(CorsFilter 先后置,再 TimingFilter 后置)。
    • 销毁阶段:按初始化顺序的逆序执行(先销毁 CorsFilterTimingFilter)。
  2. 执行流程图

    请求到达 →
    ├─ TimingFilter.doFilter() →
    │  ├─ 前置处理 →
    │  │  └─ 调用 chain.doFilter() →
    │  │     ├─ CorsFilter.doFilter() →
    │  │     │  ├─ 前置处理 →
    │  │     │  │  └─ 调用 chain.doFilter() → Controller →
    │  │     │  └─ 后置处理 →
    │  │     └─ 返回到 TimingFilter →
    │  └─ 后置处理(计算总耗时) →
    └─ 响应返回
    

代码注释详解
  • TimingFilter

    • init():初始化时打印日志,可读取配置参数。
    • doFilter():记录请求开始时间,调用 chain.doFilter() 继续链,后置处理计算耗时。
    • destroy():释放资源(如关闭数据库连接)。
  • CorsFilter

    • init():初始化时打印日志。
    • doFilter():设置 CORS 头,调用 chain.doFilter() 继续链。
    • destroy():清理资源。
  • FilterRegistrationBean

    • setOrder(1):确保 TimingFilter 先于 CorsFilter 执行。
    • addUrlPatterns("/*"):拦截所有请求路径。

总结表格
Filter 名称功能执行顺序关键方法生命周期
TimingFilter记录请求处理总耗时1(优先级最高)init(): 初始化计时器 → doFilter(): 记录开始/结束时间 → destroy(): 无特殊操作初始化时记录启动 → 请求时计算耗时 → 关闭时销毁 Filter 实例
CorsFilter设置跨域响应头(CORS)2(次之)init(): 初始化 → doFilter(): 设置响应头 → destroy(): 无特殊操作初始化时准备 CORS 配置 → 请求时设置响应头 → 关闭时销毁 Filter 实例

关键点总结
  1. Filter 链顺序控制

    • 通过 FilterRegistrationBean.setOrder() 设置优先级(数值越小优先级越高)。
    • 若未设置 setOrder(),默认按注册顺序执行。
  2. Filter 生命周期

    • init():Servlet 容器启动时调用一次,用于初始化资源。
    • doFilter():每个请求触发一次,处理请求/响应。
    • destroy():应用关闭时调用一次,用于释放资源。
  3. 典型应用场景

    • 日志记录:记录请求时间、路径、参数。
    • 安全验证:检查 Token、IP 白名单。
    • 性能监控:统计接口响应时间。

常见问题
  1. 如何动态调整 Filter 顺序?

    • 修改 FilterRegistrationBean.setOrder() 的数值,无需重启应用即可生效。
  2. 后置处理未执行怎么办?

    • 确保 doFilter() 方法中调用了 chain.doFilter(),否则链无法继续。
  3. 如何排除特定路径?

    • FilterRegistrationBean 中设置 excludeUrlPatterns(),或在 Filter 内部逻辑中判断路径。
http://www.cadmedia.cn/news/8289.html

相关文章:

  • 福州便民网首页推广优化seo
  • 装饰网站建设重要性semantic
  • 网站建建设心的浙江网站建设推广
  • 交易网站开发短视频如何引流与推广
  • 打开2345网址网站优化排名推广
  • 糖果网站建设策划书seo成都培训
  • 一个人免费看的高清电影在线观看网站性能优化的方法有哪些
  • 江苏工程信息网seo查询seo
  • 成都附近旅游景区哪里好玩郑州seo技术
  • 商丘微信推广平台seo运营是什么意思
  • 网站建设劳务协议域名权重查询工具
  • 个人网站建设与实现毕业设计足球比赛直播
  • 网站建设网页制作软件有哪些注册商标查询官网入口
  • 一键生成视频app软件长沙市seo百度关键词
  • 潮州外贸网站建设识万物扫一扫
  • 企业网站建设公司郑州网络营销推广的5种方法
  • 亚马逊企业网站建设百度重庆营销中心
  • 梨树县住房和城乡建设局网站百度公司电话
  • 全国最火的加盟项目百度seo霸屏软件
  • 凯里市网站建设长沙网站提升排名
  • 如何查看域名以前是做什么网站的站长工具
  • 石台做网站seo工资待遇怎么样
  • 电子商务网站建设学什么软件重庆seo排名扣费
  • 手机网站建设教材站长百度
  • 绍兴公司注册网站推广优化排名教程
  • 郑州购物网站建设百度下载免费官方安装
  • 广告商网站建设网站收录怎么弄
  • 可以写代码的网站不屏蔽的国外搜索引擎
  • 工程网络图信息流优化师证书
  • 广东品牌网站建设百度在线下载