Grails Spring Security插件@Secured注释未解析

时间:2012-05-16 06:59:47

标签: grails spring-security

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")
    }
}

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

请帮我实现此代码。

我正在使用netbeans IDE,并且有导入 import grails.plugins.springsecurity.Secured

的警告(如红色惊叹号,通常显示为java代码)
unable to resolve class grails.plugins.springsecurity.Secured @ line 5, column 1.

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

4 个答案:

答案 0 :(得分:5)

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

import grails.plugin.springsecurity.annotation.Secured

请使用此。 参考:source

答案 1 :(得分:2)

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

答案 2 :(得分: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
    }

答案 3 :(得分:0)

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

由于应用程序从命令行编译并运行,因此它肯定是IDE的一个问题。我检查了我的插件,没有列出Spring Security。右键单击插件 - >打开Grails插件管理器并通过STS安装。它将卸载并重新安装相同的插件。我正在运行旧版本的STS,所以希望这可以通过更新的版本来修复。

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