日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java Servlet Filter 拦截Ajax请求,统一处理session超时的问题

發布時間:2025/7/14 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java Servlet Filter 拦截Ajax请求,统一处理session超时的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

后臺增加filter,注意不要把druid也屏蔽了

import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject;import cn.zsmy.constant.Constant; import cn.zsmy.entity.User;/** * session超時過濾 * * @date 2016-10-20*/ public class SessionFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletResponse httpServletResponse = (HttpServletResponse) response; //只過濾了ajax請求時session超時if (httpServletRequest.getHeader("x-requested-with") != null && httpServletRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { Subject subject = SecurityUtils.getSubject();User user = (User) subject.getPrincipal();if(user == null){Constant.MY_LOG.debug("filter:sessionstatus timeout!");//如果是ajax請求響應頭會有,x-requested-with httpServletResponse.setHeader("sessionstatus", "timeout");//在響應頭設置session狀態 return; }} chain.doFilter(request, response); } @Override public void destroy() { } }

?

web.xml加入過濾器配置,注意不要把druid也屏蔽了,url-pattern可以指定過濾的東西

<!--session超時過濾處理 --><filter><filter-name>sessionFilter</filter-name><filter-class>cn.zsmy.palmdoctor.filter.SessionFilter</filter-class></filter><filter-mapping><filter-name>sessionFilter</filter-name><!-- <url-pattern>/*</url-pattern> --><url-pattern>*.do</url-pattern></filter-mapping>

?

?

在公共的js文件中加入以下全局控制ajax的配置

<c:set var="appPath" value="<%=request.getContextPath()%>"/>

<script type="text/javascript"> $(function(){$.ajaxSetup ({cache: false, //關閉AJAX緩存async:false, //同步請求contentType:"application/x-www-form-urlencoded;charset=utf-8", complete:function(XMLHttpRequest,textStatus){ //通過XMLHttpRequest取得響應頭,sessionstatus, var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); if(sessionstatus=="timeout"){ alert("由于您長時間未操作,登錄已失效,請重新登錄");parent.location.href = "${appPath}/login.do";} } }); }); </script>

?

總結

以上是生活随笔為你收集整理的java Servlet Filter 拦截Ajax请求,统一处理session超时的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。