栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java web项目中防止用户注销后“后退”按钮返回注销前页面

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java web项目中防止用户注销后“后退”按钮返回注销前页面

实现方式:在Action中清除了缓存

jsp:


     
  • 欢迎:${sessionScope.user.username}
  • 退出系统
  • UserAction:

        public String exit(){
            HttpSession session = ServletActionContext.getRequest().getSession();
            session.setAttribute("user",null);
            return "exitOk";
        }

    struts.xml:

        /login.jsp
    

    这样做虽然清空了session,返回了登录页面,但是如果点击了浏览器的后退按钮又回到了之前的页面,这是因为浏览器的后退使用了本地缓存,改进后的:

    新建一个NoCacheFilter类:

    package com.tjcu.filter;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class noCacheFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
            HttpServletResponse hsr = (HttpServletResponse) res;
            hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
            hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            Expiree 实体报头域给响应过期的日期和时间  HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期
            hsr.setDateHeader("Expires", 0); // Proxies.
            chain.doFilter(req, res);
        }
    
        @Override
        public void destroy() {
    
        }
    }

    web.xml:

      
        noCacheFilter
        com.bz.filter.noCacheFilter
      
      
        noCacheFilter
        *.jsp
      

    *.jsp表示对任意的jsp页面都使用noCacheFilter进行过滤,可以根据实际情况改变

    Http消息报头包括普通报头、请求报头、响应报头、实体报头

    普通报头中的Cache-Control用于指定缓存指令,缓存指令是单向的、独立的

    响应中的缓存指令请求中不一定存在,一个消息的缓存指令不会影响另一个消息处理的缓存机制

    请求时的缓存指令:no-cache/no-store/max-age/max-state/min-fresh/only-if-cached

    响应时的缓存指令:public/private/no-cache/no-store/no-transform/must-revalidate/proxy-revalidate/max-age/s-maxage

    各个消息中的指令含义如下:

    public 指示响应可被任何缓存区缓存
    private 指示对于单个用于的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述用户的部分响应消息,此响应消息对于其他用户的请求无效
    no-cache 指示请求或响应请求或响应消息不能缓存
    no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存

    expires是response的一个属性可以设置页面在浏览器的缓存里保存的时间

    超过设定的时间后就过期,过期后再次浏览该页面就需要重新请求服务区发送页面数据

    如果在规定的时间内再次访问此页面,直接从缓存中读取

    * 前端验证码的请求中可以带入时间数 每次点击都会认为是新的一次请求

     
    

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/489025.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号