@WebFilter注解功能简介说明

欢喜 Servlet 发布时间:2025-05-27 14:49:49 阅读数:18680 1

@WebFilter注解简介

`@WebFilter`是Java Servlet 3.0
  引入一个标准注解(Annotation)
   用于声明一个类为过滤器(Filter)
    它替代传统 `web.xml` 中 
	  `<filter>` 和 `<filter-mapping>` 
	   配置方式
	   使开发者可以更简洁地定义和注册过滤逻辑。

`@WebFilter`注解功能

功能 描述
声明一个 Filter 类 标记某个类实现`Filter`接口并作为请求过滤器
指定过滤URL模式 替代 `<url-pattern>`
控制哪些请求会被该Filter 处理
指定过滤Servlet名称 替代`<servlet-name>`可选
设置初始化参数用`@WebInitParam`配置Filter启动参数
支持异步请求处理 控制是否支持异步请求过滤

`@WebFilter`注解定义

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.Runtime)
public @interface WebFilter {
    String[] value() default {};
    String[] urlPatterns() default {};
    String description() default "";
    String filterName() default "";
    WebInitParam[] initParams() default {};
    boolean asyncSupported() default false;
}

例 1:最简使用方式(仅配置 URL 过滤)

@WebFilter("/*")
public class LoggingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化逻辑(可选)
    }

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

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        System.out.println("请求开始: " + httpRequest.getRequestURI());

        // 继续执行后续过滤器或目标 Servlet
        chain.doFilter(request, response);

        System.out.println("请求结束: " + httpRequest.getRequestURI());
    }

    @Override
    public void destroy() {
        // 销毁逻辑(可选)
    }
}
 
//以上Filter
   将拦截所有请求
   并在控制台打印请求路径
  

例 2
带多个 URL 映射和初始化参数

 
@WebFilter(
    urlPatterns = {"/admin/*", "/api/*"},
    initParams = {
        @WebInitParam(name = "encoding", value = "UTF-8"),
        @WebInitParam(name = "debug", value = "true")
    },
    filterName = "CharacterEncodingFilter"
)

public class CharacterEncodingFilter implements Filter {

    private String encoding;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        encoding = filterConfig.getInitParameter("encoding");
        String debug = filterConfig.getInitParameter("debug");
        System.out.println("字符编码设置为:" + encoding);
        if ("true".equals(debug)) {
            System.out.println("调试模式已开启");
        }
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        response.setCharacterEncoding(encoding);
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        //清理资源
    }
}

`@WebFilter`注解与 `web.xml` 对比

 使用 `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>
 
   使用`@WebFilter`后
     可完全省去XML配置
	 使代码更简洁、模块化更强

`@WebFilter`注解 支持的匹配方式(urlPatterns)

匹配方式 示例 说明
精确匹配 `/login` 只匹配 `/login` 请求
路径匹配 `/admin/*` 匹配 `/admin/user`, `/admin/settings` 等
扩展名匹配 `*.jsp` 匹配所有 `.jsp` 文件请求
默认匹配 `/*` 匹配所有请求

`@WebFilter`注解适用场景

场景 使用方式
设置字符编码 如 UTF-8 编码统一处理
日志记录 记录请求开始和结束时间
权限验证 拦截未登录用户访问后台接口
敏感词过滤 修改请求内容或响应内容
响应头设置 添加 CORS、Cache-Control 等响应头
性能监控 统计请求耗时、吞吐量等指标
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/Servlet/202505/315.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者