【问题标题】:Grails Spring Security plugin @Secured annotation not resolvedGrails Spring Security插件@Secured注解未解析
【发布时间】:2012-05-16 06:59:47
【问题描述】:
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

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

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

【问题讨论】:

标签: grails spring-security


【解决方案1】:

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

import grails.plugin.springsecurity.annotation.Secured

请使用这个。 参考:source

【讨论】:

  • 链接已损坏。
  • 修复了断开的链接,谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我在 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
        }
    

    【讨论】:

    • 基本上我只希望如果登录的用户具有 ROLE_ADMIN 角色,那么如果用户是普通用户,则只有 def adminhomepage() 应该被执行,然后 def userhomepage() 被执行。
    • 好吧,您并没有真正回答我提出的任何问题,并且您在原始帖子中没有说任何关于 ROLE_ADMIN 或 def userhomepage() 的内容。查看我的编辑,如果这不起作用,请详细解释发生了什么。
    • 基本上我在用户管理部分使用spring security core插件。我正在关注弹簧安全代码的教程,这里是链接。 blog.springsource.org/2010/08/11/... 在此链接中,您将找到 PostController () 类,一旦在任何方法中定义了注释,它就会检查角色,否则它不会执行该方法。 t.我已经编辑了我的原始帖子,请查看并提出解决方案
    【解决方案4】:

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

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

    希望这对偶然发现这个旧线程的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-09
      • 2016-07-18
      • 1970-01-01
      • 2021-07-08
      • 2013-02-13
      • 2015-01-28
      • 2012-01-12
      • 1970-01-01
      • 2015-09-04
      相关资源
      最近更新 更多