避免代理服务器的缓存带来的问题

      最近客户反映用户登录系统的时候,用户资料会变成另外一个人的,经过排查,发现:用户的网络架构采用一个代理服务器,所有用户上网均通过该代理服务器访问,缓存问题造成了该问题,申请的url相同,代理就不会再去访问服务器,直接把缓存中的数据给返回到客户端,去网上搜了好多帖子,最后结合自己项目的实际情况,采用以下方案解决了该问题,在此记录下来和大家分享。

     新加一个过滤器,在过滤器的doFilter方法中加入以下代码:

public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest)request;
	//	System.out.println(req.getRequestURI());
		req.setAttribute("date", new Date());
		req.setAttribute("random", Math.random());
		chain.doFilter(request, response);
	}

加入日期和随机数,

过滤器的url-pattern将需要过滤的url给配置上,界面上将特定的url后面加上这两个参数,用ognl表达式获取值

<script>
var navBarInfo = new Array();
<c:forEach items="${navList}" var="nav">
	<c:if test="${nav.fdType==1}">
		navBarInfo[navBarInfo.length] = "<c:out value="${nav.fdName}"/>|<c:url value="/sys/home/sys_home_nav/sysHomeNav.do?method=view&fdId=${nav.fdId}"/>
		|<c:out value="${nav.fdPicName}"/>";
		 
	</c:if>
	<c:if test="${nav.fdType==2}">
		navBarInfo[navBarInfo.length] = "<c:out value="${nav.fdName}"/>|<c:url value="${nav.fdUrl}?i=${random}&date=${date}"/>|<c:out value="${nav.fdPicName}"/>";
	</c:if>
</c:forEach>

</script>

 通过此url访问的数据全部恢复正常了。

相关推荐