zoukankan      html  css  js  c++  java
  • shiro登陆后没有返回设置的successUrl?

      第一次学习shiro的时候,并没有发现很大的问题。但后来在做项目的时候,特别是当访问的url是iframe的页面的时候,session又过期了,跳转到登陆页,完成登陆操作后,返回了只有iframe的页面,相当不好看。虽然在shiro里设置了successUrl,但是没有起作用。

      不明真相的我,debug后跟进去观察后发现FormAuthenticationFilter成功登陆后,会调用它的onLoginSuccess方法,最后会调用下面这个实际执行的方法。

     WebUtils.redirectToSavedRequest(request, response, getSuccessUrl());

    我们来窥一下这个方法实际做了什么。

      public static void redirectToSavedRequest(ServletRequest request, ServletResponse response, 
     String fallbackUrl)
    throws IOException { String successUrl = null; boolean contextRelative = true; SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request); if (savedRequest != null &&
          savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)){ successUrl
    = savedRequest.getRequestUrl(); contextRelative = false; } if (successUrl == null) { successUrl = fallbackUrl; } if (successUrl == null) { throw new IllegalStateException("....."); } WebUtils.issueRedirect(request, response, successUrl, null, contextRelative); }

      可以看出如果由之前的页面跳转到登陆页的话,savedRequest保存了原来的地址,这个地址会取代我们设置的successUrl;只有当savedRequest为null的时候,successUrl才会是我们设置的地址。

      好了,那我们要怎么做避免它返回页面,只返回到我们指定的页面呢?如果要我选的话,我会选择继承FormAuthenticationFilter并重写父类的方法AuthenticationFilter的issueSuccessRedirect方法,最后差不多就是

    @override
    protected void issueSuccessRedirect(ServletRequest request, ServletResponse response) throws Exception {
            WebUtils.issueRedirect(request, response, successUrl, null, true);
    }

      源码是我们最好的老师,如果网上找不到答案,可以尝试一下读源代码,这样可以对框架有一个更好的了解,准确运用框架有更好的帮助。

  • 相关阅读:
    形象理解ERP(转)
    禁用windows server 2008 域密码复杂性要求策略
    How to adding find,filter,remove filter on display method Form
    Windows Server 2008 R2激活工具
    How to using bat command running VS development SSRS report
    Creating Your First Mac AppGetting Started
    Creating Your First Mac AppAdding a Track Object 添加一个 Track 对象
    Creating Your First Mac AppImplementing Action Methods 实现动作方法
    Creating Your First Mac AppReviewing the Code 审查代码
    Creating Your First Mac AppConfiguring the window 设置窗口
  • 原文地址:https://www.cnblogs.com/ginponson/p/5205962.html
Copyright © 2011-2022 走看看