Это поведение выглядит очень странно.Javi предлагает сохранить контекст безопасности в сеансе вручную, но это должно быть сделано автоматически с помощью Spring Security SecurityContextPersistenceFilter
.
Одной из возможных причин, которую я могу себе представить, является filters = "none"
на <intercept-url>
вашей страницы обработки регистрации.
filters = "none"
отключает все фильтры безопасности для указанного URL.Как видите, это может помешать другим функциям Spring Security.Таким образом, лучший подход состоит в том, чтобы оставить фильтры включенными, но настроить их так, чтобы они были доступны для всех пользователей.У вас есть несколько вариантов:
- При старом синтаксисе атрибута
access
(т.е. без <http use-expressions = "true" ...>
): access = "ROLE_ANONYMOUS"
разрешает доступ для неаутентифицированных пользователей, но запрещаетаутентифицированные - Чтобы разрешить доступ всем пользователям, вы можете написать
access = "IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED"
- Используя новый синтаксис на основе языка Spring Expression (
<http use-expressions = "true" ...>
) вы просто пишете access = "true"
, чтобы разрешить доступ всем пользователям (но другие <intercept-url>
должны также использовать этот синтаксис).