3

我希望能够记录我的应用收到的未经授权的请求。因为 Shiro 插件使用 HTTP 重定向将用户发送到auth/unauthorized请求对象是一个新的,我无法获得原始 URL;控制器/动作名称;或从中请求参数。

有没有办法在 AuthController 未经授权的操作中确定原始 url 或控制器和操作名称(如果可能,还可以请求参数)?

我正在查看http://plugins.grails.org/grails-shiro/tags/RELEASE_1_1_3/ShiroGrailsPlugin.groovy作为插件源的参考。

详细信息:
Grails 1.3.7
Shiro Grails 插件 1.1.3

4

1 回答 1

2

我有同样的问题......我的解决方案并不完美:

浏览器在您可以通过的标题之一中发送所谓的引用者

request?.getHeader('Referer')

但是引用者并不是你真正可以依赖的——但大多数浏览器都会发送它。

accessControl()另一个解决方案可能是过滤器:在调用之前尝试将当前 url 写入另一个变量ShiroSecurityFilters.groovy。您可以通过request.forwardURI.

更新:刚刚验证了我的最后一个假设 - 这对我来说似乎是最干净的解决方案:

ShiroSecurityFilters.groovy,替换

            // Access control by convention.
            accessControl()

            // Access control by convention.
            if (!accessControl()) {
                session.deniedUrl = request.forwardURI
                return false
            }

session.deniedUrl这使您可以像在 auth/unauthorized 控制器中一样访问 url 。

于 2012-04-19T21:14:10.667 回答