现在的位置: 首页 > 综合 > 正文

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

2013年11月28日 ⁄ 综合 ⁄ 共 1158字 ⁄ 字号 评论关闭

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

原文地址:http://www.lyb411.com/a/jiagou/2012/0112/517.html

抱歉!评论已关闭.