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
.
Надеюсь, что это поможет разобраться.