Java基础(25)过滤器有哪些作用和用法

Java基础(25)过滤器有哪些作用和用法

在Java Web开发中,过滤器(Filter)是Java Servlet技术中的一个重要组成部分,主要用于在请求到达Servlet之前或响应发送给客户端之后,对HTTP请求和响应的内容进行检查、修改和处理。过滤器可以用于很多场景,比如日志记录、安全控制、性能监测、通用行为修改等。

常见的过滤器作用

认证:检查用户是否登录,若未登录则重定向到登录页面。日志记录:记录请求的详细信息,如IP地址、请求的资源、请求时间等。请求重写:修改请求数据或参数。响应管理:添加或修改响应头、压缩响应内容等。资源管理:统一设置字符编码,避免乱码问题。缓存控制:实现页面的缓存逻辑。访问控制:实现基于角色的访问控制。

过滤器的使用

以下是一个基于Java Servlet API的过滤器示例,用于演示如何创建一个简单的日志记录和请求验证过滤器。

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import javax.servlet.http.HttpServletRequest;

import java.io.IOException;

@WebFilter("/secured/*") // 此过滤器仅对URL模式为 /secured/* 的请求生效

public class MyFilter 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;

// 日志记录示例

String ipAddress = req.getRemoteAddr();

System.out.println("IP "+ ipAddress + ", Time " + new java.util.Date().toString());

// 请求验证示例

// 假设我们通过检查一个header来验证请求是否合法

String authHeader = req.getHeader("Authorization");

if (authHeader == null || !authHeader.equals("valid-token")) {

throw new ServletException("Unauthorized access!");

}

// 继续过滤链,让请求到达下一个过滤器或目标Servlet

chain.doFilter(request, response);

// 可以添加响应后处理代码

}

@Override

public void destroy() {

// 过滤器销毁代码

// 在服务器关闭时调用一次,通常用于释放资源

}

}

在上述代码中,@WebFilter("/secured/*")定义了过滤器的映射路径,这表示该过滤器只会对路径匹配/secured/*的请求进行过滤处理。

在doFilter()方法中,首先进行了请求的日志记录,然后进行了一个简单的验证,假设检查请求中的Authorization头是否为valid-token来模拟认证。如果认证失败,则通过抛出ServletException来阻断请求的进一步处理。如果认证成功,通过调用chain.doFilter()将请求转发给下一个过滤器或目标Servlet。

最后,init()和destroy()方法分别提供了初始化和销毁过滤器时的资源处理逻辑。

过滤器的执行顺序由它们在web.xml中声明的顺序或者通过@WebFilter注解的order属性定义。当有多个过滤器时,请求会按顺序通过它们,最后到达Servlet,响应则相反,会按逆序通过每个过滤器回到客户端。

过滤器提供了一种强大的方式来处理请求和响应的通用逻辑,它可以减少Servlet中的重复代码,使得程序的设计更加模块化和易于管理。

相关推荐

博世干衣机笔记
365bet在线手机版

博世干衣机笔记

📅 06-29 👁️ 8817
懢的解释
beat365老版本

懢的解释

📅 08-22 👁️ 3174
购买 Apple Watch
beat365老版本

购买 Apple Watch

📅 07-22 👁️ 4032
一淘怎么邀请新用户
365bet在线手机版

一淘怎么邀请新用户

📅 08-24 👁️ 5975
使用Revo Uninstaller Pro彻底卸载软件及清除残留文件和注册表项
英雄联盟阿狸要多少
365bet在线手机版

英雄联盟阿狸要多少

📅 09-06 👁️ 8084
目前哪个变态手游app最靠谱 推荐十大靠谱的变态游戏平台
电视的属性有哪些(电视的功能卖点)
亚洲365世界杯

电视的属性有哪些(电视的功能卖点)

📅 09-14 👁️ 9750
在 Outlook 中仅查看未读邮件
亚洲365世界杯

在 Outlook 中仅查看未读邮件

📅 07-19 👁️ 4381