Spring Security как обновить userDetails без входа в систему - PullRequest
3 голосов
/ 01 сентября 2011

Я новичок в Spring Security. Я реализовал UserDetails, чтобы создать своего собственного пользователя. У меня также есть мой пользовательский userDetailsService. И теперь все работает, но я не должен обновлять информацию о моем пользователе без входа в систему. Как это можно сделать? Как я могу получить информацию из контекста и затем изменить ее? Заранее спасибо

1 Ответ

3 голосов
/ 01 сентября 2011

Если пользователь не вошел в систему, вы не сможете получить его из SecurityContext. Это процесс входа в систему, который помещает пользователя в контекст.

Просто используйте UserDetailsService для загрузки пользователя (UDS - это всего лишь DAO), а затем измените и сохраните его при необходимости. Это было бы полезно, например, в административных случаях (например, администратор исправляет ошибку в имени пользователя).

Дайте мне знать, если вы не об этом.

EDIT:

ОК, в ответ на ваш комментарий (и я делаю это по памяти, поэтому он может быть не на 100%):

SecurityContext context = SecurityContextHolder.getContext();
Authentication auth = context.getAuthentication();
CustomUser user = (CustomUser) auth.getPrincipal();

Что-то очень близкое к этому, если это не совсем верно. Будьте осторожны, потому что вы получите ClassCastException, если пользователь фактически не вошел в систему - вызов getPrincipal () вернет String «anonymousUser», если активирован анонимный фильтр Spring Security. Конечно, вы можете легко обновить код, чтобы справиться с этой возможностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...