Я отвечу на свой вопрос для будущих поколений пытается решить ту же проблему.
Уловка заключается в использовании шаблона дизайна декоратора и плохо документированного g: pageProperty gsp tag.
просмотров/макеты/application.gsp:
....
<li class="dropdown menu">
<a href="#" class="dropdown-toggle"
data-toggle="dropdown"><g:pageProperty name="page.username"/></a>
<ul class="dropdown-menu">
<li>Preferences</li>
<li>
<a href="${resource(file: 'j_spring_security_logout')}"
class="navbar-btn btn-danger btn">Logout</a></li>
</ul>
</li>
....
просмотров/index.gsp:
....
<body>
<content tag="username">
<g:username username="${username}"/>
</content>
....
TagLib/UsernameTagLib.groovy:
class UsernameTagLib {
def springSecurityService
/**
* Check if the username is already available, else inject newly created username into the layout
*
* @attr username REQUIRED that was received from the newly registered user
*/
def username = { attrs ->
String currentUsername = springSecurityService.getCurrentUser()?.username
if (currentUsername) {
out << currentUsername
} else {
out << attrs.username
}
}
}
Созданное имя пользователя передается в views/index.gsp, когда пользователь завершил весь процесс oAuth.
Контроллеры/OauthCallBackController.groovy
....
def facebook() {
Token facebookAccessToken = (Token) session[oauthService.findSessionKeyForAccessToken('facebook')]
if (facebookAccessToken) {
String username = oauthCallBackService.facebook(facebookAccessToken)
render view: '/index', model: [username: username]
} else failure()
}
....
В основном имя пользователя путешествует вверх, пока он не достигнет раскладку, что позволяет мне использовать имя пользователя в заголовке макета и распространение информации о его на всех страницах, которые нуждаются в раскладка.
Вы используете плагин Spring Security Core? –
Вы сказали, что перемещение заголовка вне макета не является вариантом, но можно ли использовать ag: включить только для отображения зарегистрированного пользователя, который мог бы попасть в контроллер, чтобы получить имя входа, если оно существует, и сделать Это? – bschipp
Невозможно переслать пользователя из действия аутентификации, например.действие домашней страницы после того, как они вошли в систему? Тогда имя пользователя будет доступно при визуализации представления. – Armand