温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Servlet如何过滤

发布时间:2026-09-01 06:06:08 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java Servlet 中,“过滤”通常是指使用 Filter(过滤器) 来拦截请求和响应。下面从概念、使用步骤到常见示例给你一个清晰说明。


一、什么是 Servlet Filter

Filter(过滤器) 是 Servlet 规范中的组件,用于在:

  • 请求到达 Servlet 之前
  • 响应返回 客户端之前

进行统一处理,比如:

  • 登录校验
  • 编码设置
  • 日志记录
  • 权限控制
  • XSS / SQL 注入过滤

二、Filter 的生命周期

init()      -> 初始化(只执行一次)
doFilter()  -> 每次请求都会执行
destroy()   -> 容器销毁时执行

三、基本使用步骤

1️⃣ 创建 Filter 类

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*") // 拦截所有请求
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        System.out.println("Filter 初始化");
    }

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

        System.out.println("请求前处理");

        // 放行请求
        chain.doFilter(request, response);

        System.out.println("响应后处理");
    }

    @Override
    public void destroy() {
        System.out.println("Filter 销毁");
    }
}

2️⃣ 配置 Filter(两种方式)

✅ 方式一:注解(推荐)

@WebFilter(urlPatterns = "/*")

✅ 方式二:web.xml

<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>com.example.MyFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

四、常见过滤示例

✅ 1. 字符编码过滤

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);

✅ 2. 登录拦截过滤

HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;

Object user = req.getSession().getAttribute("user");
if (user == null) {
    res.sendRedirect("/login.jsp");
    return;
}
chain.doFilter(request, response);

✅ 3. 只过滤部分路径

@WebFilter("/admin/*")

或:

@WebFilter(urlPatterns = {"/user/*", "/order/*"})

五、多个 Filter 的执行顺序

  • 注解方式:按类名排序(不稳定)
  • web.xml:按配置顺序执行
<filter-mapping> A </filter-mapping>
<filter-mapping> B </filter-mapping>

执行顺序:

A → B → Servlet → B → A

六、Filter 与 Servlet 的区别

对比项 Filter Servlet
作用 预处理 / 后处理 业务处理
是否能放行 能(chain.doFilter) 不能
是否必须 可选 核心

如果你有具体场景(如 Spring Boot 过滤、XSS 过滤、权限控制),我可以给你更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手