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


    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.     }

     

     

  • 相关阅读:
    LocalDateTime的使用
    GAN详解
    高效、易用、可拓展我全都要:OneFlow CUDA Elementwise模板库的设计优化思路
    Xcode14.3.1打包报错Command PhaseScriptExecution failed with a nonzero exit code
    iPhone苹果15手机怎么取消订阅付费的项目?
    GitHub:30%的新增代码出自AI工具Copilot之手
    webpack插件开发必会Tapable
    windows安装composer并更换国内镜像
    docker搭建rocketmq集群
    MPLS基础与工作原理
  • 原文地址:https://blog.csdn.net/tangshiyilang/article/details/134087705