авторизация с помощью плагина Spring Security Grails - PullRequest
1 голос
/ 29 сентября 2011

Фон

Я использую плагин Spring Security Grails.Поскольку мои классы User и Role не являются объектами GORM, я заменил UserDetailsService, предоставляемый плагином, на собственную реализацию:

class CustomUserDetailsService implements UserDetailsService {

    static transactional = false
    private static final log = LogFactory.getLog(this)

    @Autowired
    private UserManager userManager

    @Autowired
    private RoleManager roleManager

    UserDetails loadUserByUsername(String username) {
        User user = userManager.getUserByEmail(username)
        UserDetails userDetails = new UserAdapter(user, roleManager)

        log.debug "user '$username' has roles: ${userDetails.authorities?.authority}"
        userDetails       
    }
}

Проблема

Когда я вхожу, ясм. следующее сообщение зарегистрировано от CustomUserDetailsService.loadUserByUsername()

пользователь 'a5511120@nepwk.com' имеет роли: [USER]

Так что, похоже, что пользователь былназначена роль ПОЛЬЗОВАТЕЛЯ.Тем не менее, когда я пытаюсь получить доступ к действию этого контроллера:

@Secured(['ROLE_USER', 'ROLE_ADMINISTRATOR'])
class MyProfileController {
    def someAction = { // impl omitted }
}

, я получаю сообщение о том, что доступ запрещен.Я уверен, что пользователь вошел в систему, потому что на странице запрещенного доступа есть разметка, такая как

<sec:ifLoggedIn>
  protected content
</sec:ifLoggedIn>

, и отображается защищенный контент.Таким образом, похоже, что роль USER не связана с текущим пользователем, когда выполняется авторизация контроллера.В сообщении журнала указывается, что UserDetailsService в порядке.

1 Ответ

0 голосов
/ 29 сентября 2011

Решение

Решение состоит в том, чтобы имена ролей в классе / базе данных домена начинались с "ROLE_" в соответствии с параметрами аннотации.

Подтверждения

Вся заслуга в этом ответе принадлежит @BurtBeckwith и @tim_yates, которые предоставили решение в комментариях.Я конвертирую их комментарии в ответ, так как будущие читатели могут легко пропустить свои комментарии.

...