Автоматический вход в систему с помощью Grails Spring Security

Приложение My Grails использует подключаемый модуль Spring Security. Мне нужно программно войти в систему пользователя, и у меня нет доступа к его паролю. Я пробовал следующее, которое предположительно работало при использовании плагина Acegi (предка плагина Spring Security):

// automatically login a user and assign them the USER role. 
// In my app, the email address is also the username
GrantedAuthority[] auths = [new GrantedAuthorityImpl('USER')]
SecurityContextHolder.context.authentication 
        = new UsernamePasswordAuthenticationToken(email, 'unknown', auths)

Похоже, что это почти сработало, потому что если я вызову springSecurityService.principal после выполнения выше, я возвращаю адрес электронной почты автоматически вошедшего в систему пользователя. Однако, если я вызываю springSecurityService.currentUser , я получаю сообщение об ошибке. Основная причина этой ошибки в том, что:

SpringSecurityUtils.securityConfig.userLookup.userDomainClassName

возвращает «Человек», который не является именем моего класса пользователя. Различные теги, такие как , также не работают, предположительно по той же причине.

Интересно, связана ли эта проблема как-то с тем, что я использую существующие классы домена для пользователя и роли (а не классы, созданные плагином)? Если пользователь входит в систему, вводя свое имя пользователя и пароль в форму (а не программно), все вроде работает нормально.

Обновление

Следуя совету Берта , я заменил приведенный выше код на:

springSecurityService.reauthenticate(email)

Но я все еще получаю сообщение об ошибке в этих строках в SpringSecurityService.getCurrentUser ()

String className = SpringSecurityUtils.securityConfig.userLookup.userDomainClassName
grailsApplication.getClassForName(className).get(principal.id)

Потому что для className установлено значение «Person», а не имя моего класса User.

14
задан Community 23 May 2017 в 11:46
поделиться