您的位置:首页 > 娱乐 > 明星 > 重庆市造价工程新希望官网_微盟微商城收费标准_怎么在百度上设置自己的门店_营销助手下载app下载

重庆市造价工程新希望官网_微盟微商城收费标准_怎么在百度上设置自己的门店_营销助手下载app下载

2025/7/19 23:36:13 来源:https://blog.csdn.net/2301_80208990/article/details/146439323  浏览:    关键词:重庆市造价工程新希望官网_微盟微商城收费标准_怎么在百度上设置自己的门店_营销助手下载app下载
重庆市造价工程新希望官网_微盟微商城收费标准_怎么在百度上设置自己的门店_营销助手下载app下载

@WebFilter 是 Java Servlet 3.0 之后引入的注解(Annotation),用于定义Servlet 过滤器(Filter),避免在 web.xml 里进行繁琐的配置。

1. @WebFilter 的作用

  • 用于标记一个类是Servlet 过滤器

  • 通过 urlPatternsvalue 指定要拦截的请求路径。

  • 过滤器可以在请求到达 Servlet 之前或返回客户端之前进行处理,如权限校验、日志记录、修改请求/响应等。

2. @WebFilter 的基本使用

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*") // 拦截所有请求
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器初始化");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {System.out.println("请求进入过滤器");// 继续请求(让请求到下一个过滤器或目标 Servlet)chain.doFilter(request, response);System.out.println("响应离开过滤器");}@Overridepublic void destroy() {System.out.println("过滤器销毁");}
}

3. @WebFilter 主要参数

(1)urlPatterns / value

指定要拦截的请求路径。

@WebFilter(urlPatterns = {"/api/*", "/admin/*"})
// 或者
@WebFilter(value = {"/api/*", "/admin/*"})

(2)servletNames

指定拦截特定的 Servlet,而不是路径。

@WebFilter(servletNames = {"MyServlet"})

(3)dispatcherTypes

控制过滤器在请求的哪个阶段执行:

  • REQUEST(默认):普通请求。

  • FORWARDRequestDispatcher.forward() 转发时触发。

  • INCLUDERequestDispatcher.include() 包含时触发。

  • ERROR:错误请求时触发。

  • ASYNC:异步请

    @WebFilter(urlPatterns = "/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})
    

    求时触发。

4. 过滤器的执行顺序

  • 多个过滤器按照类名的字母顺序执行,例如:

    • AFilter 先执行,BFilter 后执行。

  • 如果要手动指定顺序,可以使用 @WebFilter 配合 @Order 注解:

@Order(1) // 优先级高,先执行
@WebFilter("/*")
public class FirstFilter implements Filter {}@Order(2) // 优先级低,后执行
@WebFilter("/*")
public class SecondFilter implements Filter {}

5. @WebFilter vs. web.xml 配置

方式优势劣势
@WebFilter代码简洁,易读不能动态修改,需要重启服务器
web.xml可动态修改,无需改代码代码较冗长,手写 XML

6. 进阶:登录拦截器示例

@WebFilter("/admin/*") // 仅拦截 /admin/ 目录
public class AuthFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;HttpSession session = req.getSession(false);if (session == null || session.getAttribute("user") == null) {res.sendRedirect("/login.jsp"); // 未登录,跳转到登录页面return;}chain.doFilter(request, response); // 继续执行}
}

 

总结

  • @WebFilter 用于定义过滤器,拦截特定 URL 或 Servlet 请求。

  • doFilter() 需要调用 chain.doFilter(request, response) 放行请求,否则会中断请求链。

  • 过滤器可以拦截请求、修改响应、实现权限控制、日志记录等功能

  • 可使用 @Order 指定多个过滤器的执行顺序。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com