grails中的字符串不是字符串?

时间:2011-05-19 14:14:27

标签: string grails

这个错误在我身上发生了无数次,通常我找到了一种不使用字符串的方法,但这令人非常沮丧。

偶尔出现这样的错误:

  

执行控制器的动作[编辑]   [edu.drexel.goodwin.events.web.EventController]   引起异常:   groovy.lang.MissingMethodException:没有   签名方法:   grails.plugins.springsecurity.SpringSecurityService.ifAllGranted()   适用于参数类型:   (java.lang.String)值:   [ROLE_SUPER_ADMIN]“

我正在使用的代码如下:

springSecurityService.ifAllGranted(new String("ROLE_SUPER_ADMIN")) 

我也尝试了以下所有方面无济于事:

springSecurityService.ifAllGranted("ROLE_SUPER_ADMIN")
springSecurityService.ifAllGranted("""ROLE_SUPER_ADMIN""")
springSecurityService.ifAllGranted('ROLE_SUPER_ADMIN')
springSecurityService.ifAllGranted('''ROLE_SUPER_ADMIN''')

基本上好像每个字符串变量都会立即变成存储在字符串中的值...但是你如何实际使用字符串变量?

非常感谢你的帮助, -Asaf

1 个答案:

答案 0 :(得分:3)

我很确定问题不是字符串问题,而是“使用API​​错误”问题。查看文档:

http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/index.html

我在ifAllGranted课上没有看到SpringSecurityService。我相信它曾经存在于旧版本的SpringSecurity(即Acegi)中。

尝试使用SpringSecurityUtils.ifAllGranted而不是springSecurityService。如果您对它的工作方式感兴趣,请使用source,luke。

/**
     * Check if the current user has all of the specified roles.
     * @param roles  a comma-delimited list of role names
     * @return <code>true</code> if the user is authenticated and has all the roles
     */
    public static boolean ifAllGranted(final String roles) {
        Collection<GrantedAuthority> inferred = findInferredAuthorities(getPrincipalAuthorities());
        return inferred.containsAll(parseAuthoritiesString(roles));
    }