背景
我希望缓存某些页面的 HTML 响应。由于 ehCache 已在我的应用程序中使用,因此显然需要在那里寻找解决方案。碰巧 ehCache 有一些开箱即用的过滤器,例如 SimplePageCachingFilter可用。
问题
这些过滤器通常使用包含 query string as keys的URL 。就我而言,不同的用户将具有相同的网址,并且该页面的内容将有所不同。我无法在查询字符串中添加用户 ID。因此,也许对我来说,解决方案是基于 cookie 缓存页面 [或使用其他一些唯一的用户 ID] 作为 key 的一部分。
问题
我的问题是如何使用除 SimplePageCachingFilter 使用的 key 之外的其他 key 。该文档建议重写 javax.servlet.http.HttpServletRequest 以考虑重要的 QS 参数,但没有讨论如何完全重写 key 的制定方式。
缺乏示例代码也是一个问题,因此如果有人能给我指出一些可以更好地控制按键的示例代码,我将不胜感激。
此外,如果能够控制使缓存失效,而不是仅仅等待内容自行过期,那就太好了,尽管这对我的应用程序来说并不是必需的。
最佳答案
从SimplePageCachingFilter的源代码中我们可以看到缓存的key是如何构建的:
protected String calculateKey(HttpServletRequest httpRequest) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(httpRequest.getMethod()).append(httpRequest.getRequestURI()).append(httpRequest.getQueryString());
String key = stringBuffer.toString();
return key;
您可以仅重写此方法,以将 session ID(每个用户是唯一的)包含在 key 中(基于 url),例如:
protected String calculateKey(HttpServletRequest httpRequest) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(httpRequest.getSession().getId()).append(httpRequest.getMethod()).append(httpRequest.getRequestURI()).append(httpRequest.getQueryString());
String key = stringBuffer.toString();
return key;
我首先添加 sessionid 的原因是(不同于)可能性,某些 queryString 以有效的 session id 结尾。
关于java - ehCache 基于Cookie的网页缓存Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22438936/