Grails Spring Безопасность (получить текущий пользователь)

Есть ли случай для:

def user = User.get(springSecurityService.principal.id)

над

def user = springSecurityService.currentUser

Все, о чем я могу думать, это предотвращать ленивые интины или гарантировать, что данные, на которых вы сейчас работаете, не являются устаревшими?

Ответ 1

В практическом плане я не вижу большой разницы между этими двумя. Я был бы склонен использовать

def user = springSecurityService.currentUser

Потому что это немного короче, чем другая форма, это то, что рекомендуют плагин docs, и может быть некоторое дополнительное кэширование пользователя в плагине (помимо кэширования, уже предоставленного Hibernate).

Update

Метод SpringSecurityService.getCurrentUser() теперь устарел и согласно комментарию javadoc

будет удален в будущей версии без замены, но с документацией о том, как добавить эту функциональность в приложение

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

Ответ 2

Ну, между ними есть небольшая разница. В документации указано это.

currentUser всегда будет возвращать экземпляр домена текущего пользователя.

principal, с другой стороны, извлекает зарегистрированного пользователя principal. Если аутентифицировано, директором будет grails.plugin.springsecurity.userdetails.GrailsUser, если вы не создали пользовательский UserDetailsService, и в этом случае он будет выполняться там, где используется UserDetails.

Если не аутентифицирован и активен AnonymousAuthenticationFilter (true по умолчанию), то используется стандартный org.springframework.security.core.userdetails.User.

Надеюсь, что это поможет разобраться.