• 此页面不能正确地重定向


    1587c0da7a7b49029df13c9a441fc79d.png

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

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

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

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

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

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

    2、正确的Filter的写法

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

    1. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
    2.             throws IOException, ServletException {
    3.         System.out.println("=============loginFilter=============");
    4.         //进来之后我需要判断当前用户有没有登录,如果登录放行,否则去登录页
    5.         //1、获取当前的请求地址
    6.         HttpServletRequest request=(HttpServletRequest)servletRequest;
    7.         HttpServletResponse response=(HttpServletResponse)servletResponse;
    8.         String url=request.getRequestURI();
    9.         System.out.println("==url=="+url);
    10.         //如果请求的地址中包含了login字样,说明用户正在登录,放行。
    11.         //indexOf判断login在url字符串中首次出现的索引的位置
    12.         if(url.indexOf("login")>=0 || url.indexOf("userinfo.do")>=0){
    13.             //用户在登录中,放行
    14.             filterChain.doFilter(servletRequest, servletResponse);
    15.             return ;
    16.         }
    17.         
    18.         HttpSession session=request.getSession();
    19.         UserInfo user=(UserInfo)session.getAttribute("userinfo");
    20.         System.out.println("==user==filter==="+user);
    21.         if(user==null){
    22.             response.sendRedirect("login.jsp");
    23.             return ;
    24.         }
    25.         //FilterChain过滤链,进行放行
    26.         filterChain.doFilter(servletRequest, servletResponse);
    27.     }

     

     

  • 相关阅读:
    c++ rpc调用nodejs
    Spring Cloud 面试题总结
    第八章:多线程
    小白学习-ElasticSearch教程(3) -文档查询之term精确查询
    flask获取post请求参数
    ajax有哪些优缺点?
    Minecraft 1.16.5模组开发(五十四) 方块探测器(Detector)
    2022年“网络安全”赛项驻马店市赛选拔赛 任务书
    Week 7 Learning Representation with Auto-Encoder(无监督学习)
    MySQL架构设计详解
  • 原文地址:https://blog.csdn.net/tangshiyilang/article/details/134087705