Я использую подключаемый модуль безопасности Spring в приложении Grails. Страница входа отображается по двум причинам.
- Пользователь перешел к нему напрямую
- Пользователь попытался получить доступ к странице, которая доступна только зарегистрированным пользователям.
Только в случае (2) я хочу отобразить сообщение типа "вы пытались получить доступ к странице, требующей входа в систему", но в коде GSP страницы входа я не могу найти способ отличить (1) и (2), возможно ли это?
Ответ 1 · рейтинг 1 · Burt Beckwith
Когда вас перенаправляют, Spring Security сохраняет SavedRequest в сеансе под ключом SPRING_SECURITY_SAVED_REQUEST_KEY, поэтому вы можете проверить его наличие в auth.gsp:
<g:if test='${session.SPRING_SECURITY_SAVED_REQUEST_KEY}'>
// display "you attempted to access a page that requires login"
</g:if>
<g:else>
// direct access to login
</g:else>
Ответ 2 · hvgotcodes
Вы можете изменить URL-адрес различных конфигураций безопасности Spring так, чтобы он указывал на контроллер, а затем имел ответвление на основе информации в сеансе. В проекте 1.3.7 сделано что-то вроде
security {
authenticationFailureUrl = '/logout/doLogout'
afterLogoutUrl = '/logout/doLogout'
}
тогда имел
class LogoutController {
def doLogout = {
def wasHere = session.getAttribute('some-attribute-you-set')
if (wasHere) render view: 'requirelogin'
else render view: 'normallogin'
}
}