避免代理服務器的緩存帶來的問題

      最近客戶反映用戶登錄系統的時候,用戶資料會變成另外一個人的,經過排查,發現:用戶的網絡架構採用一個代理服務器,所有用戶上網均通過該代理服務器訪問,緩存問題造成了該問題,申請的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訪問的數據全部恢復正常了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章