Java Filter 实例:防止缓存与用户登录检测
版权申诉
199 浏览量
更新于2024-09-06
收藏 42KB PDF 举报
"该PDF文件主要讲解了Java中Filter的使用方法,重点在于如何通过Filter进行数据过滤以及实现特定的功能,如防止浏览器缓存页面和检测用户是否已登录。"
在Java Web开发中,Filter(过滤器)是Servlet API的一部分,它允许开发者在请求到达目标Servlet或JSP之前对其进行拦截和处理,以及在响应返回给客户端之前进行修改。Filter可以用来实现多种功能,如数据校验、权限控制、日志记录等。以下是两个示例代码:
1. 防止浏览器缓存页面的Filter:
```java
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/
* 用于使浏览器不缓存页面的过滤器
*/
public class ForceNoCacheFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache");
httpResponse.setHeader("Pragma", "no-cache");
httpResponse.setDateHeader("Expires", -1);
filterChain.doFilter(request, response);
}
public void destroy() {
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
```
在这个例子中,Filter会在响应头中设置"Cache-Control"、"Pragma"和"Expires"字段,确保浏览器不会缓存页面。"no-cache"告诉浏览器不要缓存响应,设置"Expires"为-1表示过期时间是在过去,进一步强调不应缓存。
2. 检测用户是否登录的Filter:
```java
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.io.IOException;
/
* 用于检测用户是否已登录的过滤器
*/
public class LoginCheckFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession(false);
if (session == null || session.getAttribute("username") == null) {
// 用户未登录,重定向到登录页面
httpResponse.sendRedirect("/login.jsp");
} else {
// 用户已登录,继续执行请求链
filterChain.doFilter(request, response);
}
}
public void destroy() {
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
```
这个Filter检查每个请求的会话(session),如果会话不存在或者没有"username"属性,说明用户没有登录,Filter会将请求重定向到登录页面。反之,如果会话中有"username"属性,说明用户已登录,Filter会允许请求继续执行。
使用Filter时,需要在web.xml配置文件中声明Filter,并指定其拦截哪些URL模式:
```xml
<filter>
<filter-name>ForceNoCacheFilter</filter-name>
<filter-class>com.example.ForceNoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ForceNoCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>LoginCheckFilter</filter-name>
<filter-class>com.example.LoginCheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginCheckFilter</filter-name>
<url-pattern>/protected/*</url-pattern>
</filter-mapping>
```
这样,所有以"/protected/"开头的URL都会被LoginCheckFilter拦截,而所有请求都将通过ForceNoCacheFilter,防止浏览器缓存页面。
通过合理使用Filter,开发者可以实现高效且灵活的Web应用程序,提升用户体验并增强安全性。在实际项目中,Filter通常与其他安全框架(如Spring Security)结合使用,提供更强大的功能和控制。
2021-10-11 上传
2021-12-06 上传
2023-07-09 上传
2023-09-07 上传
2023-09-26 上传
2023-10-11 上传
2023-06-01 上传
2023-06-13 上传
2023-06-02 上传
maodi_lzc
- 粉丝: 1
- 资源: 3万+
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦