Servlet过滤器(Filter)

Servlet过滤器(Filter)

Servlet过滤器(Filter)是Java Servlet技术中的一种重要组件,它允许开发者在请求进入目标资源(如Servlet或JSP页面)之前或之后执行某些预处理或后处理任务。过滤器主要用于实现如日志记录、权限检查、字符编码转换、压缩响应数据等通用功能。

以下是一个Servlet过滤器的基本使用案例:

创建一个Servlet过滤器类:

java 复制代码
import javax.servlet.*;
import java.io.IOException;
/**
* @author liwei
*/
public class LoggingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 这里可以初始化过滤器所需资源
        // 例如,从web.xml或注解中读取配置信息
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        long startTime = System.currentTimeMillis();

        // 在请求到达目标资源前执行的操作
        //比如校验用户是否登录等
       if(user == null){
  //         response 响应未登录的提示
        }else{
             chain.doFilter(request, response); // 执行过滤链,继续处理请求
        }

     

        long endTime = System.currentTimeMillis();

        // 在请求离开目标资源后执行的操作
        ServletResponseWrapper responseWrapper = (ServletResponseWrapper) response;
        String requestedUrl = ((HttpServletRequest) request).getRequestURI();
        System.out.println("Time spent processing request for " + requestedUrl + " was " +
                (endTime - startTime) + " milliseconds.");

        // 这里可以添加更多后处理操作,如修改响应内容等
    }

    @Override
    public void destroy() {
        // 在Web应用关闭时执行的清理工作
    }
}

配置过滤器:

在传统的web.xml配置方式下,你需要在部署描述符中声明并配置过滤器:

xml 复制代码
<filter>
    <filter-name>loggingFilter</filter-name>
    <filter-class>com.example.LoggingFilter</filter-class>
    <!-- 可以在这里添加初始化参数 -->
</filter>

<filter-mapping>
    <filter-name>loggingFilter</filter-name>
    <url-pattern>/*</url-pattern> <!-- 这表示过滤所有请求 -->
</filter-mapping>

或者使用注解方式进行配置:

kotlin 复制代码
import javax.servlet.annotation.WebFilter;
@WebFilter(filterName = "loggingFilter", urlPatterns = "/*")
public class LoggingFilter implements Filter { ... }

urlPatterns = "/*" 是在Servlet或Servlet过滤器的配置中使用的通配符模式,用于指定过滤器或Servlet应该处理哪些URL请求。这里的*是一个通配符,代表任意字符串。

在Servlet或过滤器的配置上下文中,urlPatterns属性指定了该组件应当响应的URL路径列表。当值设置为 "/*" 时,意味着这个过滤器或Servlet将匹配所有的请求,无论请求的URL是什么,只要它们属于该Web应用的上下文根路径下。

例如,假设Web应用的上下文路径是 /myApp,那么配置 urlPatterns = "/*" 的过滤器或Servlet将会处理以下所有类型的请求:

  • /myApp/home
  • /myApp/about
  • /myApp/login
  • /myApp/service/api
  • /myApp/assets/images/logo.png

"/*" 表示该过滤器或Servlet将拦截并处理该Web应用下的所有URL请求。

也可以配置为:

  • /myApp/service/*

表示该过滤器或Servlet将拦截并处理该Web应用下的/myApp/service/ URL请求。

原文链接 www.hanyuanhun.cn | node.hanyuanhun.cn

相关推荐
代码吐槽菌2 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
豌豆花下猫2 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai
YMWM_2 小时前
第一章 Go语言简介
开发语言·后端·golang
码蜂窝编程官方2 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm3 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊3 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
AuroraI'ncoding3 小时前
时间请求参数、响应
java·后端·spring
好奇的菜鸟3 小时前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.03 小时前
Go语言进阶&依赖管理
开发语言·后端·golang
许苑向上3 小时前
Dubbo集成SpringBoot实现远程服务调用
spring boot·后端·dubbo