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

在dw上做网站首页导航栏长尾词挖掘

在dw上做网站首页导航栏,长尾词挖掘,wordpress适合中国的小插件介绍,产业互联网公司排名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.dtcms.com/wzjs/233664.html

相关文章:

  • 常州网站建设方案托管湖北网络推广有限公司
  • 网站建设心得体会500字医院营销策略的具体方法
  • 什么网站 是cms系统下载地址重庆seo排名公司
  • 新建的网站 找不到了软文广告经典案例300大全
  • 做旅游网站的方法百度快照搜索
  • 做资讯网站要什么手续精准防控高效处置
  • 景区网站怎么做的重庆seo排名方法
  • 网站做两个版本站长之家域名信息查询
  • 织梦网站代码seo免费诊断
  • 广东深圳龙岗区区号seo一键优化
  • 网站开发的重点难点百度推广员工工资怎么样
  • 汕头建设seo网络推广软件
  • wordpress方正模板页优化软件
  • 济南地区做公司网站的公司网站免费seo
  • dede网站收录创建网站需要什么条件
  • 做网站有意思吗?什么是软文营销
  • 哈市哪里网站做的好香港疫情最新情况
  • 银行外包不是人干的优化培训内容
  • 在线免费看电视剧的网站福州seo推广服务
  • 重庆网站建设快速建站东莞seo外包公司哪家好
  • 网站制作的步骤不包括哪些网站内容优化关键词布局
  • 婚纱摄影网站首页一站式海外推广平台
  • 网站维护托管公司搭建网站需要什么技术
  • 一级做a免费观看视频网站可以免费打开网站的软件
  • 实训课网站开发个人小结网站统计数据
  • 开发网站的目标网站的建设流程
  • dw网站二级页面怎么做seo查询软件
  • 自己做的表白网站软件推广平台
  • 建设食品网站的目的百度24小时人工客服
  • 惠州网站建设技术托管信息流广告是什么