【问题标题】:Spring-MVC 3.1: Preventing A JSP From Being Cached In A BrowserSpring-MVC 3.1:防止在浏览器中缓存 JSP
【发布时间】:2012-08-17 17:55:50
【问题描述】:

我正在为我的 web 应用程序使用 Spring 3.1。我试图阻止一个 JSP 缓存在用户的浏览器中,以防止他们通过后退按钮访问它。

我很幸运在 Servlet 中使用这些设置来打印 HTML 页面:

response.setHeader("Cache-control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");                
response.setHeader("Expires", "-1");                     

我无法让这些调用在控制器函数中工作(通常从重定向调用):

  @RequestMapping(value = "/error")
    public String error(HttpSession session,HttpServletResponse response, ModelMap model){
        logger.debug("started");

        response.setHeader("Cache-control", "no-cache, no-store");
        response.setHeader("Pragma", "no-cache");                
        response.setHeader("Expires", "-1"); 

        String status_message = (String)session.getAttribute("status_message");
        status_message = (status_message == null) ? "" : status_message.trim();
        session.removeAttribute("status_message");
        model.put("status_message",status_message);

        return "error";
    }

我也尝试像这样将调用放在我的 JSP 中(在头文件的包含上方和下方):

<%@ include file="header.jsp" %>
<%
   response.setHeader("Cache-control", "no-cache, no-store");
   response.setHeader("Pragma", "no-cache");                
   response.setHeader("Expires", "-1"); 
 %>
     <!-- content -->

<%@ include file="footer.jsp" %>

我还尝试将调用放在包含在每个 JSP 中的头文件中,尽管我只希望不存储一个 JSP....只是想看看我是否可以让它工作。它不起作用:

<%@ page language = "java" session = "true" import = "java.util.*, java.text.*" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix = "f" uri="http://www.springframework.org/tags/form"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

<title>Acme Customer Service</title>
    <link rel = "StyleSheet"  href = "../nsd/css/nsd.css"   type = "text/css"/>
</head>

我还尝试在 0 和 -1 之间切换“过期”设置。没有骰子。

关于如何让单个 JSP 缓存在用户浏览器中的任何想法?

非常感谢

史蒂夫

【问题讨论】:

    标签: jsp caching spring-mvc browser-cache


    【解决方案1】:

    您需要扩展 org.springframework.web.servlet.handler.HandlerInterceptorAdapter,如果请求的 uri 与控制器的 uri 匹配,则在 postHandle 方法中添加标头。您还可以在控制器的 HttpServletRequest 中设置一个属性,然后在拦截器中检查它。您还可以使用 spring-mvc-util 为给定的 uri 创建一个拦截器。

    【讨论】:

    • 我对 Spring 有点陌生。你能发布一个例子吗? Spring 是否会覆盖我以正常方式使页面过期的能力?
    【解决方案2】:

    每次都使 url 唯一:向 url 添加一个 get 参数以包含纪元秒数或其他一些唯一字符串。

    所以你最终会得到类似:http://www.google.com?param1=val1&secs=2342314234

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2011-04-28
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多