这个错误在我身上发生了无数次,通常我找到了一种不使用字符串的方法,但这令人非常沮丧。
偶尔出现这样的错误:
执行控制器的动作[编辑] [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
答案 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));
}