1.问题描述:

最近自己在写demo时遇到一个问题,在ajax请求时用Filter做登录拦截,结果页面不跳转(Ajax是不能做转发和重定向的)、、、、

最终的最终在同事zt的提示下,恍然大悟,虽然很基本的问题,但也纠结了好久,只能说太菜,记录下来,以免以后再犯。

2.解决办法:

在doFilter方法中判断是否为Ajax请求,做进一步处理

代码如下:

/**

* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

*/

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

HttpServletResponse resp=(HttpServletResponse) response;

HttpServletRequest req=(HttpServletRequest) request;

String url = req.getRequestURI();

System.out.println(url);

HttpSession session = ((HttpServletRequest) request).getSession();

String path = req.getContextPath();

String basePath= req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+"/";

basePath=basePath+"rest/userManager/loginOut";

try {

// 过滤掉登陆和退出请求

if ((url.indexOf("/ddoa/rest/userManager/login") >= 0)|| (url.indexOf("/ddoa/rest/userManager/loginOut") >= 0)) {

chain.doFilter(request, response);

} else {

if (null != session) {

Map map = (Map) session.getAttribute("userMap");

if(null!=map){

chain.doFilter(request, response);

}else{

//1:判断是否是ajax请求

if (req.getHeader("x-requested-with") != null&& "XMLHttpRequest".equalsIgnoreCase(req.getHeader("x-requested-with"))) {

//向http头添加 状态 sessionstatus

resp.setHeader("sessionstatus","timeout");

resp.setStatus(403);

//向http头添加登录的url

resp.addHeader("loginPath", basePath);

chain.doFilter(request, response);

return ;

}else{

resp.sendRedirect(basePath);

}

}

} else {

//1:判断是否是ajax请求

if (req.getHeader("x-requested-with") != null&& "XMLHttpRequest".equalsIgnoreCase(req.getHeader("x-requested-with"))) {

//向http头添加 状态 sessionstatus

resp.setHeader("sessionstatus","timeout");

resp.setStatus(403);

//向http头添加登录的url

resp.addHeader("loginPath", basePath);

chain.doFilter(request, response);

return ;

}else{

resp.sendRedirect(basePath);

}

}

}

} catch (IOException | ServletException e) {

e.printStackTrace();

}

}

登陆拦截拦截ajax,过滤器实现登录拦截需要注意的问题(AJAX请求的处理)相关推荐

  1. java 如何在拦截器重定向,java – 来自登录拦截器的Struts2重定向

    我们的应用程序要求用户登录以查看任何内容. LoginInterceptor拦截对所有页面的访问,如果用户没有有效会话,则会调出登录表单.我希望拦截器在显示登录表单之前记住原始请求URI,并在登录表单 ...

  2. ajax模拟post登录,求教如何模拟网页的ajax来post登陆数据?

    [C#] 纯文本查看 复制代码//跳转到登陆页面 HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = ...

  3. Springboot实现登录拦截的三种方式

    文章目录 1. 登录认证 1.1 介绍 1.2 方式 1.3 扩展 2. 实现 2.1 项目结构以及前置准备 2.2 过滤器实现登录拦截 2.3 拦截器实现登录拦截 2.4 AOP+自定义注解实现 2 ...

  4. SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器

    1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...

  5. Spring Boot 实现登录拦截器,这才是正确的姿势!!

    原文:https://blog.csdn.net/qq_27198345/article/details/111401610 对于管理系统或其他需要用户登录的系统,登录验证都是必不可少的环节,在Spr ...

  6. .NETMVC 使用过滤器完成未登录拦截

    实现功能:当程序未登录时不能通过URL访问其他页面. 具体:未登录时访问其他页面会自动跳转到登陆页面. 1.创建MVC项目 不过多累述. 2.创建过滤器 如图可创建一个文件夹,把拦过滤器类收录在内. ...

  7. ajaxsetup获取ajax的url_ajaxsetup,组合拦截器处理session过期,跳转登录页面

    当前位置:我的异常网» Ajax » ajaxsetup,组合拦截器处理session过期,跳转登录页面 ajaxsetup,组合拦截器处理session过期,跳转登录页面 www.myexcepti ...

  8. java登陆拦截器_SpringBoot拦截器实现登录拦截

    SpringBoot拦截器可以做什么 可以对URL路径进行拦截,可以用于权限验证.解决乱码.操作日志记录.性能监控.异常处理等. SpringBoot拦截器实现登录拦截 pom.xml:<?xm ...

  9. vue拦截器刷新登陆页面_Vue + Spring Boot 项目实战(六):前端路由与登录拦截器-Go语言中文社区...

    前言 这一篇主要讲前端路由与登录拦截器的实现.放在一起讲是因为我在开发登录拦截器时因为这个路由的问题遇到了很多坑,花费了很长时间,网上的解决方案都不怎么靠谱,综合了好几种办法才最终成功,其实关于这个部 ...

最新文章

  1. 我,25岁,高中时创立的自动驾驶技术公司即将上市,估值34亿美元
  2. 协同办公工具解决了什么问题?
  3. 如何准确区别python中strftime strptime的用法
  4. python中abc属于字符串吗_Python基础学习:字符串
  5. 希捷服务器硬盘savvio,2.5英寸进军万转!希捷Savvio硬盘评测
  6. leetcode 491. Increasing Subsequences | 491. 递增子序列(Java)
  7. python37.dll可能与您正在运行_模块可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86或x64...
  8. django orm_Django ORM简介
  9. NS3 MyApp Class Reference
  10. (转)主成分分析(Principal components analysis)-最大方差解释
  11. 软考资料已经 ready,你get 到了吗?
  12. stm32—光敏电阻传感器的初步使用
  13. python3  类中方法的调用
  14. 神仙打架!清华公布2020特奖候选人名单,有人三篇顶会一作!还有人...
  15. Python os.symlink创建软链接
  16. 雨林木风诚聘Linux研发工程师
  17. Scratch课程设计(五)
  18. Oracle账户被锁定解决方法
  19. 圆、椭圆和三角形的代码画法
  20. ERP BOM 展开方式

热门文章

  1. Vue3 --- axios 简单封装APi
  2. vue怎么获取用户的位置经纬度_vue 实现Web端的定位功能 获取经纬度
  3. python迷宫小游戏大全_Python迷宫小游戏源代码、源程序
  4. php请求接口两次,php curl post请求执行一次curl_exce 请求的接口确执行两次
  5. 外部jar包_大数据系列之PySpark读写外部数据库
  6. qt下QString转换为const char*字符串
  7. c winform mysql类_C#连接MySQL数据库操作类
  8. 土木转计算机 但计算机学院不好,土木妹子转计算机,较高三维水科研,求指导!...
  9. mysql gui 修改密码_MySQL修改root密码的各种方法整理
  10. xrdpdf卡片在哪可下载_暑假学习英语字母,就是这样简单(附可打印字母卡下载)...