这个错误无数次发生在我身上,通常我会找到一种不使用Strings的方法,但这令人难以置信。
时常发生这样的错误:
Executing action [edit] of controller [edu.drexel.goodwin.events.web.EventController] caused exception: groovy.lang.MissingMethodException: No signature of method: grails.plugins.springsecurity.SpringSecurityService.ifAllGranted() is applicable for argument types: (java.lang.String) values: [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''')
基本上就像每个字符串变量都立即变成存储在字符串中的值一样……但是您实际上如何使用字符串变量呢?
非常感谢您的帮助,
-阿萨夫
最佳答案
我非常确定问题不是字符串问题,而是“错误使用API”问题。检查文档:
http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/index.html
我在ifAllGranted
类上看不到SpringSecurityService
。我相信它在SpringSecurity的较早版本(即Acegi)中曾经存在。
尝试使用SpringSecurityUtils.ifAllGranted
代替springSecurityService。如果您对它的工作方式感兴趣,请使用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));
}
关于string - Grails中的字符串不是字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060052/