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