Я занимаюсь разработкой Spring Web Project, включая Spring Security 5. Он имеет управление пользователями.Изменение роли зарегистрированного пользователя вступает в силу только после повторного входа в систему.Я пытался выйти из среды выполнения пользователя, но getAllPrincipals всегда возвращает 0
. Я уже пробовал это.
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
container.addListener(HttpSessionEventPublisher.class);
}
}
public void expireUserSessions(String username) {
System.out.println(sessionRegistry.getAllPrincipals().size());//always 0
sessionRegistry.getAllPrincipals().forEach(it -> System.out.println(it));
for (Object principal : sessionRegistry.getAllPrincipals()) {
System.out.println("hello");
if (principal instanceof User) {
UserDetails userDetails = (UserDetails) principal;
System.out.println("user details " + userDetails);
if (userDetails.getUsername().equals(username)) {
for (SessionInformation information : sessionRegistry.getAllSessions(userDetails, true)) {
information.expireNow();
}
}
}
}
}
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
@Override
protected boolean enableHttpSessionEventPublisher() {
return true;
}
}
@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}