2016-06-14 4 views
1

Я новичок в Grails, поэтому, вероятно, я делаю что-то неправильно, но, возможно, вы можете помочь мне разобраться в этом. Поэтому у меня есть это простое приложение Grails с плагином Spring Security. Проблема заключается в том, что GSP теги страницы Spring Security не показывает информацию, которую я ожидал, пример сценария:Плагин Grails Spring Security и теги GSP не работают

  1. /basket/placeOrder Я конечная точка защищена, поэтому, когда я ударил его из браузера он показывает мне страницу входа в систему.

  2. я войти, используя правильные учетные данные, и он направляет меня к ожидаемой странице (так выглядит аутентификация успешна)

  3. Когда в одном из моих контроллеров я использую println springSecurityService.currentUser.email печатают корректные данные на консоли.
  4. Но тогда я стараюсь использовать на GSP, например:

    < sec:ifNotLoggedIn> NOT LOGGED < /sec:ifNotLoggedIn>

    Это показывает NOT LOGGED. То же самое, если я пытаюсь получить некоторую информацию о пользователе, например, <sec:loggedInUserInfo field="email" />, она не отображает ни одной строки. Так же, как Spring Security не связывается с GSP.

Я делаю что-то неправильно? Отсутствует какая-то конфигурация? Спасибо.

EDIT

Когда я посмотрел в SecurityTagLibifNotLoggedIn функции, которую он использует springSecurityService.isLoggedIn(). Когда я вызываю то же самое из контроллера, он возвращает ожидаемый результат. При печати session как в контроллере и GSP, это все равно:

SPRING_SECURITY_CONTEXT = [email protected]b66c80: Authentication: org.springframew[email protected]46b66c80: Principal: [email protected]: Username: kamil; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]43458: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: AAB2217ABEE7EAF752573D44914B0005; Granted Authorities: ROLE_ADMIN 

мне удалось запустить мое приложение на отладку, и это становится еще более странно. Сначала моя контрольная точка на контроллере показала объект SpringSecurityService и имеет значение currentUser правильно установлено. Затем одна и та же запрошенная по-прежнему обработка ударила мою точку останова, установленную в SecurityTagLib (grails только после выполнения контроллера потока-> рендеринга), у которой есть ТОЛЬКО такой объект SpringSecurityService (что означает, что это тот же компонент, ни один дубликат и т. Д.), Но он просто отсутствует данные пользователя. Weird!

Что-то должно быть не так, но понятия не имеют, что такое ...

ответ

1

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

Я использовал @Secured аннотацию для одного из действий (защищенного ROLE_ADMIN) в контроллере, который при вызове перенаправлялся на какое-либо другое действие (фильтр «нет» в конфигурации приложения). Когда я удалял фильтры из конфигурации и используемой аннотации (@Secured(['permitAll'] для путей, которые ранее были сконфигурированы в конфигурации приложения с фильтром «none»), это волшебство начало работать.У меня недостаточно опыта в плагине Grails и Spring Security, поэтому я точно не знаю, почему это вызывало проблемы, , поэтому, если кто-нибудь знает, что такое точная проблема, пожалуйста, поделитесь. Я только предполагаю, что микширование фильтров приложений и аннотаций в этом случае не сработало.