0
package hompage

import logindetails.*
import login.User
import grails.plugins.springsecurity.Secured;

class RedirectController
{
    def springSecurityService

    def index() { }

    /**
     * This method will redirect the user if it has the role "ROLE_ADMIN"
     */
    @Secured(['ROLE_ADMIN'])
    def adminhomepage =
    {
        render(view: "adminhome")
    }

    /**
     * This method will redirect the user if it has the role "ROLE_USER"
     */
    @Secured(['ROLE_USER'])
    def userhomepage=
    {
        render(view: "userhome")
    }
}

这是我的代码,当且仅当角色是 ROLE_ADMIN 时我想重定向到 adminhome,如果角色是 ROLE_USER,我想重定向到 userhome。

请帮助我执行此代码。

我正在使用 netbeans IDE,并且有 import import grails.plugins.springsecurity.Secured的警告(如通常显示 java 代码的红色感叹号)

unable to resolve class grails.plugins.springsecurity.Secured @ line 5, column 1.

即使存在导入,我也没有得到它有什么问题?

4

4 回答 4

5

包已从 grails.plugins 重命名为 grails.plugin

import grails.plugin.springsecurity.annotation.Secured

请使用这个。参考:来源

于 2013-11-27T10:48:01.003 回答
2

检查您的类路径,清理 grails,并确保插件存在于 BuildConfig.groovy 中。

于 2012-05-16T09:13:17.793 回答
0

我也在 Netbeans 中收到警告;它对我没有任何影响。一切仍然编译并运行良好。

@Secured 注释不会进行任何类型的重定向 - 它只是确保您在被发送到那里后被允许执行该操作。

我想确保我理解 - 无论他们扮演什么角色,如果有人去 'adminHomeController/index' 他们是重定向到 'adminHomeController/adminhomepage.gsp' 还是他们得到了 'adminHomeController/index.gsp' 服务?如果它们被重定向,则您提供的代码中没有任何内容会导致这种情况。您是否有任何 URL 映射可以做到这一点?

或者真正的问题是如果有人没有 ROLE_USER 他们仍然被允许去'adminHomeController/adminhomepage'?如果发生这种情况,请确保您的配置文件中有以下内容:

grails.plugins.springsecurity.securityConfigType = "Annotation"

然后重新启动应用程序并尝试以没有 ROLE_USER 的用户身份访问 adminhomepage。如果他们仍然可以到达那里,请确保他们真的没有 ROLE_USER。

如果这是在登录时重定向某人,则可以使用更全面的方法来处理此问题,例如创建自定义 AuthSuccessHandler,但这有点复杂。要以这种方式进行重定向,我会执行以下操作:

    import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils.*

    def index() {
      if(ifAnyGranted("ROLE_ADMIN")) {
           redirect(action: 'adminhomepage')
      } else if(ifAnyGranted("ROLE_USER")) {
           redirect(action: 'userhomepage')
      }
    }

    def adminhomepage() {
        //admin stuff
    }

    def userhomepage() {
        //user stuff
    }
于 2012-05-16T22:28:22.973 回答
0

我遵循了您评论中列出的相同教程并遇到了同样的问题。如本文所述,“错误”并没有阻止我的任何代码从命令行构建。但是作为一个 Grails 初学者,在游戏中这么早看到那个小小的 Red X 用于最基本的应用程序可能会令人沮丧。

由于应用程序是从命令行编译和运行的,这肯定是 IDE 的问题。我检查了我的插件,但没有列出 Spring Security。右键单击 Plugins -> Open Grails Plugin Manager 并通过 STS 安装。它将卸载并重新安装相同的插件。我正在运行旧版本的 STS,因此希望新版本可以解决此问题。

希望这可以帮助任何偶然发现这个旧线程的人。

于 2013-04-22T22:52:17.910 回答