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);
    }

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

  • 相关阅读:
    dede list调用 内容模型 附件
    dedecms list标签调用附加表字段--绝对成功
    织梦系统站点首页、列表、文章页等页面点击数调用方法
    apache include 文件包含引用的方法 报错 [an error occurred while processing this directive]
    windows 2008 中IIS7.0以上如何设置404错误页面
    织梦Fatal error: Call to a member function GetInnerText()
    dedecms清空栏目后,新建ID不从1开始的解决方法
    js禁止
    AngularJs表单验证
    submile 安装,汉化,插件
  • 原文地址:https://www.cnblogs.com/ginponson/p/5205962.html
Copyright © 2011-2022 走看看