【问题标题】:Grails Shiro plugin, unauthorized redirect missing context pathGrails Shiro 插件,未经授权的重定向缺少上下文路径
【发布时间】:2020-07-17 08:03:13
【问题描述】:

刚开始使用 Grails 4.0.2 的 Grails Shiro 插件,遇到了一个小问题,我怀疑这可能是我的配置错误。未经授权的重定向,即用户在未经授权的情况下被重定向到的 URL,似乎没有考虑为应用程序定义的上下文路径(在 application.groovy 中的 server.servlet.context-path 中)。因此,例如,对于我的“myapp”应用程序,它使用http://localhost:8090/auth/login?targetUri=/myapp/mycontroller/myaction 而不是http://localhost:8090/myapp/auth/login?targetUri=/myapp/mycontroller/myaction。我可以解决这个问题,我敢肯定,但是有什么地方可以配置它以使其正常工作吗?

【问题讨论】:

  • 它看起来应该这样做 - github.com/nerdErg/grails-shiro/blob/… - 在那里设置一个断点,看看发生了什么。
  • 冒着看起来像个白痴的风险,我不得不问这个插件的代码存储在哪里?我在我的 Grails 应用程序目录中的任何地方都找不到 AccessControl.groovy,在我的主目录的 .grails 或 .gradle 中也找不到。
  • 您不需要文件系统上已编译的 jar 位置来进行调试 - 您的 IDE 应该知道它在哪里并允许您设置断点。无论哪种方式,它都在 ~/.gradle 或 ~/.m2
  • 试过这个。它没有达到那个断点。试图找出这里的执行路径。不幸的是,问题与我的应用程序无关。我创建了一个新的完全最小的测试应用程序,它也出现在那里。我不确定这实际上是多么容易解决,至少在开发模式下是这样,因为重定向 URL 当然不是由我的 Grails 应用程序处理的,因此无法在那里处理。不过,使用用于生产的 nginx 重写规则很容易。
  • 好的,问题出在 ShiroGrailsExceptionResolver.groovy 的 resolveViewOrRedirect 方法中。此行未考虑上下文路径:String forwardUrl = UrlMappingUtils.buildDispatchUrlForMapping(info)

标签: grails shiro


【解决方案1】:

问题是 ShiroGrailsExceptionResolver 中的一个错误,它依赖于 UrlMappingUtils 来创建“forwardUrl”。如果我们进行转发,这将起作用,但我们正在进行依赖于上下文路径的重定向。

这应该很快就会得到修复,我想你的错误报告 https://github.com/nerdErg/grails-shiro/issues/16

(抱歉耽搁了)

我刚刚发布了 v4.3 和 3.3 来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2012-04-30
    • 2011-12-15
    • 2016-04-18
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多