【问题标题】:Infinite redirection with Grails Spring Security plugin使用 Grails Spring Security 插件进行无限重定向
【发布时间】:2012-01-15 01:39:52
【问题描述】:

我正在构建简单的 Grails 应用程序。为了安全,我使用 Spring Security 插件和 Spring Security UI。 我想拥有三种类型的用户:

  • 标准用户(客户),
  • 支持用户
  • 管理用户

客户将登录并提出一些请求,支持人员将收到这些请求并做出响应。管理员将负责管理用户权限和角色以及其他一些东西。

所以基本上我有三个角色:

  • ROLE_USER
  • ROLE_SUPPORT
  • ROLE_ADMIN

当用户登录时,他/她会根据用户角色重定向到不同的页面。我是按照以下建议做的 link.

这行得通。但有时我会收到以下错误:

Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。此问题有时可能是由禁用或拒绝接受 cookie 引起的。

这是我的 UrlMappings.groovy:

   class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?"{
            constraints {
                // apply constraints here

            }

        }

        "/"(controller:'login', action:'auth')
        "500"(view:'/error')

    }
}

什么是正确的方法?我应该为每个角色制作不同的控制器,还是应该制作一个 RequestController(大部分工作是通过请求域类完成的),例如为每个角色指定不同的操作 - 例如 userList、supportList、adminList 等。

【问题讨论】:

  • @Antoine 感谢您的编辑。现在好多了。
  • 当你说有时,究竟是什么时候?我的意思是你能在某些情况下总是重现它吗?这些是什么情况?
  • @omarello 它工作正常,但是当我做了一些小改动时,它就进入了这个循环。我不记得确切的变化是什么。因此,在我进一步研究之前,我将使用请求控制器的索引操作进行重定向。

标签: grails architecture spring-security


【解决方案1】:

我的 grails 应用程序有类似的要求,但角色略有不同。我要做的是:

在 UrlMappings.groovy 中

"/"(controller: "home")

然后在我的 HomeController 中(这不完全是我的代码,但你明白了)

def user

def index = {
    user = springSecurityService?.getAuthentication()?.details

    def role = user.getRole()
    if ('admin'.equals(role)) {
        redirect(view:'admin')
    } else if ('support'.equals(role)) {
        redirect(view:'support')
    } else {
        redirect(view:'home')
    }
}

我猜你的重定向问题是在登录页面出现错误时发生的。我会检查您如何处理异常并确保它们不会尝试重定向回再次导致错误的登录页面。

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 2011-11-27
    • 2013-06-21
    • 2011-10-08
    • 1970-01-01
    • 2015-12-23
    • 2012-10-11
    • 2014-09-03
    • 2016-05-24
    相关资源
    最近更新 更多