Струны в граале не являются струнами? - PullRequest
1 голос
/ 19 мая 2011

Эта ошибка случалась со мной бесчисленное количество раз, и обычно я нахожу способ не использовать строки, но это невероятно расстраивает.

Время от времени возникает такая ошибка:

Выполнение действия [править] контроллера [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 Ответ

3 голосов
/ 19 мая 2011

Я почти уверен, что проблема не в строке, а в "неправильном использовании API". Проверьте документацию:

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

Я не вижу ifAllGranted в классе SpringSecurityService. Я полагаю, что это было в более старых версиях SpringSecurity (т.е. Acegi).

Попробуйте использовать SpringSecurityUtils.ifAllGranted вместо springSecurityService. Если вам интересно, как это работает, используйте источник, Люк.

/**
     * 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));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...