Struts自定义过滤器实战:防止缓存与用户登录检测

需积分: 6 0 下载量 97 浏览量 更新于2024-09-18 收藏 40KB DOC 举报
"struts过滤器.doc" Struts框架是一个经典的Java Web开发框架,它提供了强大的MVC(模型-视图-控制器)结构来构建应用程序。过滤器是Servlet API中的一个关键概念,允许开发者在请求到达目标Servlet或JSP之前对其进行处理,或者在响应发送回客户端之后进行操作。在Struts中,过滤器可以用来实现各种功能,如安全控制、性能优化等。本文档主要介绍了两种自定义过滤器的实现:阻止浏览器缓存页面的过滤器和检测用户登录状态的过滤器。 一、使浏览器不缓存页面的过滤器 这个过滤器的主要作用是防止浏览器对页面内容进行缓存,确保每次用户访问时都能获取最新的数据。在HTTP协议中,可以通过设置特定的响应头来实现这一目的。`ForceNoCacheFilter`实现了`Filter`接口,通过调用`HttpServletResponse`的方法来设置响应头: 1. `setHeader("Cache-Control", "no-cache")`:告诉浏览器不要缓存该页面,遵循HTTP 1.1规范。 2. `setHeader("Pragma", "no-cache")`:对于HTTP 1.0的兼容,设置Pragma头,同样指示不缓存。 3. `setDateHeader("Expires", -1)`:设置过期时间为过去的时间,使得任何版本的HTTP协议都理解为已过期。 当过滤器被触发时,它会将这些头部信息添加到响应中,从而确保每次请求都会从服务器获取新鲜内容。 二、检测用户是否登陆的过滤器 此过滤器用于验证用户是否已经登录,如果未登录,则将其重定向到登录页面。实现上,它需要从请求中获取会话(session),然后检查会话中是否存在特定的键值,通常这个键值关联着用户的登录状态。配置参数`checkSessionKey`用于指定在会话中检查的键,如果找不到这个键,那么用户被认为是未登录的。 ```java // 检查用户会话中的键 String checkSessionKey = filterConfig.getInitParameter("checkSessionKey"); HttpSession session = ((HttpServletRequest) request).getSession(); Object userSessionValue = session.getAttribute(checkSessionKey); if (userSessionValue == null) { // 用户未登录,重定向到登录页面 ((HttpServletResponse) response).sendRedirect("/login.action"); return; } ``` 这种过滤器通常作为全局过滤器配置在Web应用的部署描述符(web.xml)中,确保所有受保护的资源在访问前都会进行登录检查。 Struts中的过滤器是实现业务逻辑和安全控制的重要工具。它们可以拦截请求,执行预处理,如身份验证、授权、日志记录,也可以对响应进行后处理,如内容编码、压缩等。通过自定义过滤器,开发者可以根据项目需求定制特定的功能,增强应用的安全性和用户体验。在实际项目中,结合Struts的拦截器机制,可以构建出高效、灵活的Web应用程序。