【发布时间】: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)。