最近客户反映用户登录系统的时候,用户资料会变成另外一个人的,经过排查,发现:用户的网络架构采用一个代理服务器,所有用户上网均通过该代理服务器访问,缓存问题造成了该问题,申请的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访问的数据全部恢复正常了。