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

可以下载的网站模板资产管理公司注册条件

可以下载的网站模板,资产管理公司注册条件,网站建设公司做销售前景好不好?,微软网站开发过滤器和拦截器区别执行顺序使用场景代码示例区别 过滤器 (Filter)是Java Servlet 规范的一部分,不依赖Spring,可以过滤几乎所有请求;拦截器(Interceptor)是Spring MVC 框架的一部分,依赖Spring容器,只能拦截Dispatch…

过滤器和拦截器

  • 区别
  • 执行顺序
  • 使用场景
  • 代码示例

区别

过滤器 (Filter)是Java Servlet 规范的一部分,不依赖Spring,可以过滤几乎所有请求;拦截器(Interceptor)是Spring MVC 框架的一部分,依赖Spring容器,只能拦截DispatcherServlet分配的、指向Controller的请求。

执行顺序

1. 请求进入 (Request)
2. → 过滤器 (Filter) 的 doFilter() 方法
3. → DispatcherServlet (Spring MVC 核心控制器)
4. → 拦截器 (Interceptor) 的 preHandle() 方法
5. → 执行目标 Controller 方法
6. → 拦截器 (Interceptor) 的 postHandle() 方法
7. → 渲染视图 (ViewResolver)
8. → 拦截器 (Interceptor) 的 afterCompletion() 方法
9. → 过滤器 (Filter) 的 doFilter() 方法后续逻辑
10. → 响应返回 (Response)

使用场景

过滤器:处理HTTP请求和响应最底层的操作(如修改流、压缩、统一编码、全站安全校验)
拦截器:处理与Spring MVC的请求处理生命周期紧密相关(如Controller方法执行前、后),或者需要操作HandlerMethod和ModelAndView

代码示例

自定义过滤器

@Component
@Order(1) // 定义过滤器的执行顺序
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {// 注意:这里直接@Autowired可能失效,因为Filter不由Spring管理// 需要通过其他方式获取Spring Bean(如WebApplicationContextUtils)@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 1. 在Controller处理之前执行 (预处理)System.out.println("Filter: Before controller");HttpServletRequest req = (HttpServletRequest) request;// 例如:设置统一编码req.setCharacterEncoding("UTF-8");// 继续执行过滤器链,最终会到达Servletchain.doFilter(request, response); // 这一句非常关键,相当于放行// 2. 在Controller处理之后执行 (后处理)System.out.println("Filter: After controller");// 例如:可以对Response进行操作HttpServletResponse resp = (HttpServletResponse) response;resp.setHeader("X-Custom-Header", "Hello");}// init 和 destroy 方法...
}

自定义拦截器

@Component
public class MyInterceptor implements HandlerInterceptor {// 可以方便地注入Spring管理的Bean@Autowiredprivate UserService userService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// Controller方法执行之前调用System.out.println("Interceptor: preHandle - " + request.getRequestURI());// 权限检查示例String token = request.getHeader("Authorization");if (!userService.isValidToken(token)) {response.sendError(401, "Unauthorized");return false; // 中断执行,不会再到Controller}return true; // 继续执行,到Controller}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// Controller方法执行之后、视图渲染之前调用System.out.println("Interceptor: postHandle");// 可以修改ModelAndViewif (modelAndView != null) {modelAndView.addObject("extraData", "added by interceptor");}}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 整个请求完成之后(视图已渲染)调用,常用于资源清理、日志记录异常System.out.println("Interceptor: afterCompletion");if (ex != null) {// 记录异常日志System.err.println("Request failed with exception: " + ex.getMessage());}}
}// 还需要一个配置类来注册拦截器并指定路径
@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myInterceptor).addPathPatterns("/api/**") // 只拦截/api开头的请求.excludePathPatterns("/api/login"); // 排除登录接口}
}
http://www.dtcms.com/a/462495.html

相关文章:

  • Jenkins 使用容器运行自动化任务详细文档
  • 闵行网站建设公司韩国服务器ip地址
  • 丝杆模组从结构到应用,有哪些核心类型?
  • 字节面试题:MSE的优化
  • 建设通网站会员共享密码佛山外贸网站制作
  • 哪个素材网站免费免费行情网站app斗印
  • 聚类的数据集
  • ElasticSearch八股
  • 梦中的统计:C++实现与算法分析(洛谷P1554)
  • 鸿蒙9568322问题
  • 破解工地防盗难题:如何利用EasyCVR实现视频监控统一管理?
  • 网站注册协议模板wordpress 调用摘要
  • 电商商拍革命!2025年AI工具实战测评
  • javascript中的三角关系
  • 网站的总体风格包括石家庄 网站开发
  • 【开题答辩全过程】以 宝鸡文化艺术品拍卖系统为例,包含答辩的问题和答案
  • 天猫交易网站宁波网站制作公司费用价格
  • 如何搭建网站本地安装好的wordpress怎么传到服务器上
  • ros2 setup.cfg 各个配置项详细范例
  • Android通用开发——日志常用技术总结
  • 申请网站官网网页版微信和电脑版微信的区别
  • 【2025年清华计算机考研826算法题】
  • 网上网城网站食品经营许可网站增项怎么做
  • 大模型前世今生(九):词向量汇聚为“大海”
  • 导购网站开发要多少钱个人网站不备案
  • com后缀的网站国际新闻最新消息今天大事件
  • Windows系统下MySQL 8.0详细安装教程
  • 【vLLM】源码解读:高性能大语言模型推理引擎的工程设计与实现
  • 网站seo优化有哪些陕西锦宇建设有限公司网站
  • Looper、MessageQueue、Message及Handler的关系是什么?如何保证MessageQueue的并发访问安全?