filter和sessionListener实现session超时退出功能,过滤掉轮询请求

filter和sessionListener实现session超时退出功能,过滤掉轮询请求

1.requestFilter

   public class RequestFilter implements Filter {

    HashSet<String> set = new HashSet();
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req =(HttpServletRequest) request;
        HttpSession session = req.getSession();
        String head = req.getHeader("sessionTimeOut");
        //System.out.println(session.getAttribute("sysTimeout"));
        //head为null记录时间,
        //不为null,如果set里面没有head,也记录当前时间
        //否则不记录时间
        //System.out.println("head:"  + head);
        if (head == null) {
            long lastPostTime = System.currentTimeMillis();
            System.out.println("ID1:" + session.getId());
            session.setAttribute("lastPostTime", lastPostTime);
        }
        //记录第一次轮询时间
//        else if (head != null && !set.contains(head)) {
//            long lastPostTime = System.currentTimeMillis();
//            session.setAttribute("lastPostTime", lastPostTime);
//            set.add(head);
//            System.out.println("ID2:" + session.getId());
//        }
        //System.out.println("requestLastTime:" +session.getAttribute("lastPostTime"));
        chain.doFilter(req, response);
    }

    @Override
    public void destroy() {

    }
}

2.sessionListener

@Override
    public void sessionCreated(HttpSessionEvent event) {

        HttpSession session = event.getSession();
        int time = 1;
        session.setMaxInactiveInterval(time * 60);
        session.setAttribute("sysTimeout",session.getMaxInactiveInterval());
        System.out.println(time);

    }

   public class SessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent event) {

        HttpSession session = event.getSession();
        int time = 1;
        session.setMaxInactiveInterval(time * 60);
        session.setAttribute("sysTimeout",session.getMaxInactiveInterval());
        //System.out.println(time);
        //System.out.println("lastPostTime:" + session.getAttribute("lastPostTime"));

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        
    }
}

3.web.xml

<!--listener-->
    <listener>
        <listener-class>com.kuang.core.SessionListener</listener-class>
    </listener>
    <!-- filter的映射 -->
    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.kuang.core.RequestFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

4.loginOut接口

@RequestMapping("/sessionLoginOut")
    @ResponseBody
    public String sessionLoginOut(HttpServletRequest request){
        HttpSession session = request.getSession();
        //有效提交时间,是时间戳,单位毫秒
        long lastPostTime = (long) session.getAttribute("lastPostTime");
        //当前时间,是时间戳,单位毫秒
        long currentTime = System.currentTimeMillis();

        //System.out.println("now: " + currentTime);
        //System.out.println("last: " + lastPostTime);

        //系统超时时间设置,单位秒
        Object sysTimeout = session.getAttribute("sysTimeout");
        long sysTime = Long.valueOf(String.valueOf(sysTimeout));

        System.out.println("sys:" + sysTime);

        System.out.println("差:" + (currentTime - lastPostTime)/1000);

        if ((currentTime - lastPostTime)/1000 >= sysTime) {
            //session超时,返回前端session超时状态码
            return "1000";
        }
        return "100000";
    }

5.前端Ajax轮询

var sessionTimeout = setInterval("sessionLoginOut()", 1000);
function sessionLoginOut() {
    $.ajax({
        url: '/sessionLoginOut',
        async:false,
        //contentType: "application/json;charset=utf-8",//这个参数也是header参数
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("sessionTimeOut", "timeout");
        },
        // header:{
        //     "sessionTimeOut": "timeout"
        // },
        type: 'post',
        success: function (data) {
            if (data === "1000") {
                window.location.href = "/login";
                clearInterval(sessionTimeout);
            }else {
                console.log(data);
            }
        }
    })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值