filter和sessionListener实现session超时退出功能,过滤掉轮询请求
生活随笔
收集整理的這篇文章主要介紹了
filter和sessionListener实现session超时退出功能,过滤掉轮询请求
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
filter和sessionListener實現session超時退出功能,過濾掉輪詢請求
1.requestFilter
public class RequestFilter implements Filter {HashSet<String> set = new HashSet();@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic 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);}@Overridepublic void destroy() {} }2.sessionListener
@Overridepublic 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 {@Overridepublic 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"));}@Overridepublic 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")@ResponseBodypublic 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);}}}) }總結
以上是生活随笔為你收集整理的filter和sessionListener实现session超时退出功能,过滤掉轮询请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第九十三期:带你聊聊 Java 并发编程
- 下一篇: 背包问题回溯法c语言程序,C语言回溯法解