Ponieważ nie dość dostarczyć dokładne dane w swoim pytaniu, zakładam, że masz sytuację, w której:
- Jesteś dostarczające UserDetailsService załadować do UserDetails gdy użytkownik próbuje się zalogować
- Jako część tej usługi, użytkownik wysyła zapytanie do bazy danych/DAO, aby załadować szczegółowe informacje o uprawnieniach użytkownika, i ustawia nadane uprawnienia na podstawie tej
- . Gdy powiesz "Gdy aktualizuję uprawnienia", odnoszące się do aktualizacji uprawnień użytkownika w bazie danych (lub czymkolwiek, w czym przechowujesz dane).
Jeśli tak, to co widzisz jest zgodne z projektem - Spring Security ładuje UserDetails tylko dla użytkownika za pierwszym razem, gdy próbują się zalogować, a następnie przechowuje go w Session od tego momentu. Zasadniczo ma to sens, ponieważ pozwala uniknąć konieczności wykonywania tych samych zapytań dotyczących szczegółów użytkownika w każdym żądaniu. Ponadto uprawnienia użytkownika zazwyczaj nie zmieniają się w ciągu 99,9% ich odwiedzin.
Aby zmienić to zachowanie, może zajść potrzeba dodania polecenia/strony "odświeżania", które uruchomi kod (który będzie trzeba napisać), który będzie ponownie sprawdzał usługę UserDetailsService i zastępował UserDetails w SecurityContext . Nie wierzę, że istnieje jakiś wbudowany sposób, aby to zrobić.
Jedno z możliwych rozwiązań opisano w [Dostosowanie zabezpieczonej sesji w czasie rzeczywistym] (http://spring.io/blog/2009/01/03/spring-security-customization-part-2-adjusting-secured-session- w czasie rzeczywistym) wpis na blogu Spring Source. – Karimchik
Trochę to trwało, ale myślę, że to w końcu zostało wymyślone: http://stackoverflow.com/q/23072235/42962 – hooknc