确定使用Shiro Grails插件未经授权的请求的URL(或控制器和操作名称)

时间:2012-04-19 01:54:38

标签: grails shiro

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

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

我将http://plugins.grails.org/grails-shiro/tags/RELEASE_1_1_3/ShiroGrailsPlugin.groovy视为插件来源的参考。

详细说明:
Grails 1.3.7
Shiro Grails插件1.1.3

1 个答案:

答案 0 :(得分:2)

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

浏览器在其中一个标题中发送所谓的referer,您可以通过该标题获取

request?.getHeader('Referer')

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

另一种解决方案可能是过滤器:在accessControl()中调用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的形式访问网址。