📜  Java Servlet 过滤器示例(1)

📅  最后修改于: 2023-12-03 14:42:16.042000             🧑  作者: Mango

Java Servlet 过滤器示例

Java Servlet 过滤器(Filter)是一种用来拦截客户端请求和服务器响应的机制,用于在请求到达 Servlet 之前处理一些逻辑,或者在返回到客户端之前修改响应。过滤器在 Web 应用程序中用来实现对一组 Servlet 的共同处理,例如身份验证,日志记录等。

过滤器的生命周期

当 Java Web 应用程序启动时,过滤器将被加载到容器中,当 Web 应用程序关闭时,过滤器将被销毁。一个过滤器的生命周期如下:

  1. 调用 init 方法,初始化过滤器
  2. 调用 doFilter 方法,对请求进行处理
  3. 调用 destroy 方法,销毁过滤器
过滤器的实现

以下是 Java Servlet 过滤器的实现步骤:

  1. 创建一个 Java 类,实现 javax.servlet.Filter 接口。
  2. 实现 init 方法,初始化过滤器。
  3. 实现 doFilter 方法,对客户端请求进行拦截和处理。
  4. 实现 destroy 方法,销毁过滤器。
过滤器示例代码

下面是一个实现过滤器的示例代码:

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化过滤器
    }

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

        // 获取访问的 URI
        String uri = req.getRequestURI();

        // 判断 URI 是否为登录页面,如果是则放行
        if (uri.endsWith("login.html")) {
            chain.doFilter(request, response);
            return;
        }

        // 判断用户是否已经登录,如果未登录则跳转到登录页面
        if (req.getSession().getAttribute("user") == null) {
            req.getRequestDispatcher("login.html").forward(request, response);
        }

        // 用户已登录,继续处理请求
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        // 销毁过滤器
    }
}
总结

Java Servlet 过滤器(Filter)是一种用来拦截客户端请求和服务器响应的机制,实现对一组 Servlet 的共同处理。开发者可以通过实现 javax.servlet.Filter 接口来创建自己的过滤器,并在 Web 应用程序中使用。在过滤器的 doFilter 方法中,可以对客户端请求进行拦截和处理,同时继续将请求传递给下一个过滤器或 Servlet 进行处理。