0

昨天我问了这个问题,得到了一些非常好的反馈。总结一下我的情况,我正在尝试将禁止缓存的 HTTP 响应标头添加到我的 Spring MVC Web 应用程序(我意外继承的项目)。

因此,根据回答者(最终是@Bozho)的建议,我将其添加到我的 Spring 配置文件中:

<mvc:annotation-driven/>
<mvc:interceptors>
    <bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
        <property name="cacheSeconds" value="-1"/>
        <property name="useExpiresHeader" value="true"/>
        <property name="useCacheControlHeader" value="true"/>
        <property name="useCacheControlNoStore" value="true"/>
    </bean>
</mvc:interceptors>

我在本地重新构建了我的应用程序,并在 Firefox 中打开它,这样我就可以使用 Firebug 来测试 HTTP 响应返回的标头。

对我来说不幸的是,最初的开发人员的目标是使其成为一个“单页 Web 应用程序”,每个实际 JSP 页面大约有 40 多个 AJAX 调用。

在这 40 多个 AJAX 请求中的任何一个中,我不仅没有看到我正在寻找的标头Cache-ControlExpires等,而且我担心由于每个 JSP 页面有超过 1 个 AJAX 请求,因此 Spring 拦截器不知道AJAX 调用以将标头添加到其中。我没有看到任何错误消息或日志输出表明 Spring 不喜欢我的配置等。一切似乎都很好......它只是不工作!

  • 我是否配置错误?如果没有,这不起作用的原因是什么(为什么拦截器没有启动)?
  • 多个 AJAX 调用会导致 Spring MVC 请求拦截器行为异常吗?

在此先感谢您的帮助!

4

2 回答 2

1

如果您的配置看起来完全如图所示,您的拦截器声明将不会生效。您需要将拦截器声明放入<mvc:interceptors>,请参阅Bozho 的答案

关于多个 AJAX 查询,只要这些查询由 Spring MVC 控制器处理,就应该没问题。默认情况下,拦截器会拦截所有到达控制器的请求,但您可以根据需要将其范围缩小到特定的 URL 模式。

于 2012-05-16T16:23:35.450 回答
0

当涉及到您的 XML 配置时,Spring 可能非常挑剔,并且添加从 Web 上找到的片段通常不起作用,即使对于最琐碎的示例也是如此。如果不了解您的配置的更多信息,就很难重现这一点并查看您的配置错误或与拦截器声明冲突的地方。

HttpHeaders您始终可以通过声明对象实例、配置它们并将它们包含为响应实体(这就是您正在使用的样子)来强制您的控制器返回禁止缓存的标头:

HttpHeaders headers = new HttpHeaders();
headers.add("Pragma", "no-cache");
headers.add("Expires", "Thu, 01 Jan 1970 00:00:00 GMT");
headers.add("Cache-Control", "max-age=0, no-cache, no-store");

如果你有很多控制器,并且每个控制器有很多方法,这会变成很多重复的、讨厌的代码。相反,您可以扩展HttpHeaders

public class YourAppHeaders extends HttpHeaders {
    public YourAppHeaders()            
        add("Pragma", "no-cache");
        add("Expires", "Thu, 01 Jan 1970 00:00:00 GMT");
        add("Cache-Control", "max-age=0, no-cache, no-store");
    }
}

然后,您可以浏览每个的源文件并用新实例@Controller查找/替换新实例。HttpHeadersYourAppHeaders

我推荐这种方法而不是 XML 配置有几个原因:

  • 您的 XML 配置不起作用,我没有足够的信息来理解原因;和
  • 此方法保证有效;和
  • 这是您可以添加的最少代码量来完成您正在寻找的内容

祝你好运 - HTH

于 2012-05-18T21:03:42.293 回答