java Servlet Filter 拦截Ajax请求,统一处理session超时的问题
生活随笔
收集整理的這篇文章主要介紹了
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超时的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CheLunTan.Net无需注册同样享
- 下一篇: linux服务器dns配置丢失处理