加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解决ajax请求filter重定向失败

发布时间:2020-12-15 21:28:25 所属栏目:百科 来源:网络整理
导读:2016-11-28 18:33265人阅读评论(0)收藏举报 分类: 项目中遇到的问题记录 (6) 版权声明:本文为博主原创文章,未经博主允许不得转载。 参考引用方法 在新项目写了一个filter,能拦截jsp,.action的请求,但是ajax的请求可以拦截不能实现重写向登录页面。这

2016-11-28 18:33265人阅读评论(0)收藏举报

分类:

项目中遇到的问题记录(6)

版权声明:本文为博主原创文章,未经博主允许不得转载。

参考引用方法

在新项目写了一个filter,能拦截jsp,.action的请求,但是ajax的请求可以拦截不能实现重写向登录页面。这是一个bug呀!

参考以上引用的方法,解决了。

ajax重定向的问题。

默认ajax是不支持重定向的,因为ajax本身就是局部刷新,不重新加载页面的。如果需要用到重定向可以通过以下方法:

第一步:filter

[java]view plaincopy

  1. publicclassAgentLoginFilterextendsHttpServletimplementsFilter{
  2. privatestaticfinalLoglog=LogFactory.getLog(AgentLoginFilter.class);
  3. @Override
  4. publicvoidinit(FilterConfigfilterConfig)throwsServletException{
  5. }
  6. @Override
  7. publicvoiddoFilter(ServletRequestsRequest,ServletResponsesResponse,FilterChainfilterChain)
  8. throwsIOException,ServletException{
  9. HttpServletRequestrequest=(HttpServletRequest)sRequest;
  10. HttpServletResponseresponse=(HttpServletResponse)sResponse;
  11. HttpSessionsession=request.getSession();
  12. Stringurl=request.getServletPath();
  13. StringcontextPath=request.getContextPath();
  14. Stringtype=request.getHeader("X-Requested-With")==null?"":request.getHeader("X-Requested-With");//XMLHttpRequest
  15. StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+contextPath+"/";
  16. if(url.equals("")){
  17. url+="/agent";
  18. }
  19. booleanisHasLogin=AgentSessionHelper.getHasLogined(request.getSession());
  20. if(!isHasLogin){
  21. if((url.startsWith("/agent")&&!url.startsWith("/agent/login/YSAgentLoginAction/login.action"))
  22. &&!url.startsWith("/agent/agentLogin.jsp")){
  23. if(StringUtils.equals("XMLHttpRequest",type)){
  24. //处理ajax请求
  25. response.setHeader("SESSIONSTATUS","TIMEOUT");
  26. response.setHeader("CONTEXTPATH",basePath+"agent/agentLogin.jsp");
  27. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  28. return;
  29. }else{
  30. response.sendRedirect(contextPath+"/agent/agentLogin.jsp");
  31. return;
  32. }
  33. }
  34. }else{
  35. if(url.startsWith("/agent/agentLogin.jsp")){
  36. response.sendRedirect(contextPath+"/agent/agentIndex.jsp");
  37. return;
  38. }
  39. }
  40. filterChain.doFilter(sRequest,sResponse);
  41. }
  42. }

第二步:在公共js 中写入

通过$.ajaxSetup()方法给ajax方法统一添加请求执行结束后,执行的操作。

[javascript]view plaincopy

  1. $.ajaxSetup({
  2. //设置ajax请求结束后的执行动作
  3. complete:
  4. function(XMLHttpRequest,textStatus){
  5. //通过XMLHttpRequest取得响应头,sessionstatus
  6. varsessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus");
  7. if(sessionstatus=="TIMEOUT"){
  8. varwin=window;
  9. while(win!=win.top){
  10. win=win.top;
  11. }
  12. win.location.href=XMLHttpRequest.getResponseHeader("CONTEXTPATH");
  13. }
  14. }
  15. });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读