Struts过滤器实践:防止缓存与用户登录检测
需积分: 9 24 浏览量
更新于2024-09-15
收藏 16KB DOCX 举报
"struts过滤器相关知识"
在Java Web开发中,Struts是一个非常流行的MVC框架,它帮助开发者构建可维护性和可扩展性良好的Web应用程序。过滤器(Filter)是Servlet API的一部分,用于处理HTTP请求和响应,在请求到达目标Servlet或JSP之前以及之后进行拦截和处理。在Struts框架中,过滤器可以用来增强应用程序的功能,例如防止页面缓存、检测用户登录状态等。以下将详细解释这两个实用的过滤器实例。
一、防止浏览器缓存页面的过滤器
这个过滤器通过设置特定的HTTP响应头来阻止浏览器缓存页面。当浏览器接收到这些头信息时,它会理解为该页面不应该被缓存,而是每次都应从服务器获取最新版本。以下是实现这个功能的过滤器代码:
```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 {
}
}
```
在这个过滤器中,`doFilter()`方法是核心,它首先将响应转换为`HttpServletResponse`类型,然后设置三个HTTP响应头:
- `Cache-Control: no-cache`:指示浏览器不应缓存响应。
- `Pragma: no-cache`:这个HTTP/1.0的头部对于某些老版本的浏览器仍然有效。
- `Expires: -1`:设置过期时间为过去,确保浏览器总是认为页面已过期。
二、检测用户是否已登录的过滤器
这个过滤器的作用是在用户访问受保护的资源之前,检查其是否已经登录。如果没有登录,将重定向到指定的登录页面。下面是这个过滤器的示例代码:
```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 CheckLoginFilter implements Filter {
private String checkSessionKey;
public void init(FilterConfig filterConfig) throws ServletException {
checkSessionKey = filterConfig.getInitParameter("checkSessionKey");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession session = httpRequest.getSession(false);
if (session == null || session.getAttribute(checkSessionKey) == null) {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp"); // 将重定向到登录页面的URL替换为实际的URL
} else {
filterChain.doFilter(request, response);
}
public void destroy() {
}
}
}
```
在`CheckLoginFilter`中,`init()`方法用于初始化过滤器,从Web应用的部署描述符(web.xml)中获取检查的Session关键字。`doFilter()`方法检查当前请求的`HttpSession`是否存在,并且该关键字对应的值是否非空。如果用户未登录(即没有有效的Session或Session中缺少指定的键),则使用`HttpServletResponse.sendRedirect()`将请求重定向到登录页面。
这两个过滤器示例展示了如何利用Struts和其他Servlet技术来增强应用程序的安全性和用户体验。在实际项目中,可以根据需求定制过滤器,实现如权限控制、字符编码转换、GZIP压缩等多种功能。
2011-07-29 上传
2020-11-24 上传
2019-07-27 上传
2013-09-10 上传
2012-01-31 上传
2012-01-31 上传
2016-08-20 上传
苏坡-man
- 粉丝: 0
- 资源: 9
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章