当前位置: 首页 > news >正文

此页面不能正确地重定向

这种是由于条件判断有误,程序不断的重定向到一个页面,而造成的死循环的情况

下面列举一个常出现的场景之一

1、使用过滤器实现登录验证错误处理

解释:当用户访问login.jsp进行登录的时候,这个时候请求会被Filter捕获,Filter通过session获取用户登录成功之后的信息,但是此时用户并没有登录,程序又会重定向到login.jsp。

这个时候就会出现程序进入Filter后返回重定向到login.jsp.

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {System.out.println("=============loginFilter=============");//进来之后我需要判断当前用户有没有登录,如果登录放行,否则去登录页//1、获取当前的请求地址HttpServletRequest request=(HttpServletRequest)servletRequest;HttpServletResponse response=(HttpServletResponse)servletResponse;HttpSession session=request.getSession();UserInfo user=(UserInfo)session.getAttribute("userinfo");if(user==null){response.sendRedirect("login.jsp");return ;}//FilterChain过滤链,进行放行filterChain.doFilter(servletRequest, servletResponse);}

2、正确的Filter的写法

这个时候我们需要获取当前用户的请求地址,当请求地址URL中包含login等登录字样的时候,直接放行,让用户去登录,而不是拦截。

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {System.out.println("=============loginFilter=============");//进来之后我需要判断当前用户有没有登录,如果登录放行,否则去登录页//1、获取当前的请求地址HttpServletRequest request=(HttpServletRequest)servletRequest;HttpServletResponse response=(HttpServletResponse)servletResponse;String url=request.getRequestURI();System.out.println("==url=="+url);//如果请求的地址中包含了login字样,说明用户正在登录,放行。//indexOf判断login在url字符串中首次出现的索引的位置if(url.indexOf("login")>=0 || url.indexOf("userinfo.do")>=0){//用户在登录中,放行filterChain.doFilter(servletRequest, servletResponse);return ;}HttpSession session=request.getSession();UserInfo user=(UserInfo)session.getAttribute("userinfo");System.out.println("==user==filter==="+user);if(user==null){response.sendRedirect("login.jsp");return ;}//FilterChain过滤链,进行放行filterChain.doFilter(servletRequest, servletResponse);}
http://www.lryc.cn/news/209055.html

相关文章:

  • 【Apache Flink】实现有状态函数
  • Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结
  • Linux redis 安装
  • 在Win11上部署ChatGLM3详细步骤
  • 系列七、动态代理
  • Kafka集群搭建与SpringBoot项目集成
  • 一个简单的注册的页面,如有错误请指正;(3.JavaScript)
  • selenium (自动化概念 测试环境配置)
  • Mybatis-Plus(企业实际开发应用)
  • Spring Web MVC入门
  • 【C++】mapset的底层结构 -- AVL树(高度平衡二叉搜索树)
  • 吴恩达《机器学习》1-4:无监督学习
  • 一个简单的注册页面,如有错误请指正(2.css)
  • 【Unity精华一记】特殊文件夹
  • Node.js中的单线程服务器
  • 如何删除数组中的某个元素?
  • Apache ActiveMQ RCE漏洞复现(CNVD-2023-69477)
  • 【BUG】Nginx转发失败解决方案
  • 综合OA管理系统源码 OA系统源码
  • 9-MySQL提高数据管理效率(分库分表实践)
  • 经典卷积神经网络 - NIN
  • leetcode_2558 从数量最多的堆取走礼物
  • 01. 嵌入式与人工智能是如何结合的?
  • vue3.0运行npm run dev 报错Cannot find module node:url
  • 26. 删除排序数组中的重复项、Leetcode的Python实现
  • 荣耀推送服务消息分类标准
  • [数据结构]-二叉搜索树
  • 力扣每日一题79:单词搜索
  • ChatGPT如何应对用户提出的道德伦理困境?
  • SpringBoot运行流程源码分析------阶段三(Spring Boot外化配置源码解析)