【问题标题】:Determine the url (or controller and action names) of a request which is unauthorized with Shiro Grails plugin使用 Shiro Grails 插件确定未经授权的请求的 url(或控制器和操作名称)
【发布时间】:2012-04-30 12:38:29
【问题描述】:

我希望能够记录我的应用收到的未经授权的请求。因为 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

【问题讨论】:

    标签: grails shiro


    【解决方案1】:

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

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

    request?.getHeader('Referer')
    

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

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

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

    ShiroSecurityFilters.groovy,替换

                // Access control by convention.
                accessControl()
    

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

    这使您可以在 auth/unauthorized 控制器中以 session.deniedUrl 的身份访问 url。

    【讨论】:

    • 抱歉回复慢。谢谢拉尔夫,您更新的解决方案看起来既干净又简单。我想我会同意的。
    猜你喜欢
    • 2014-07-03
    • 2022-01-11
    • 2020-07-17
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多