Как я могу получить список всех зарегистрированных пользователей (через весеннюю безопасность), мое веб-приложение
Я использую весеннюю безопасность в своем веб-приложении, и теперь я хочу иметь список всех пользователей, которые вошли в мою программу.
Как я могу получить доступ к этому списку? Разве они уже не находятся где-то в весеннем контексте? Как SecurityContextHolder или SecurityContextRepository ?
- Каков «лучший» способ делать распределенные транзакции в нескольких базах данных с использованием Spring и Hibernate
- Почему Spring MVC нуждается по крайней мере в двух контекстах?
- Spring @Transactional для чтения только для чтения
- Соответствующий шаблон является строгим, но для элемента 'tx: annotation-driven'
- Как откатить транзакцию базы данных при тестировании служб с помощью Spring в JUnit?
- Spring @ContextConfiguration, как установить правильное местоположение для xml
- Модель дизайна Singleton vs Singleton beans в весеннем контейнере
- Понимание транзакций Spring. Что происходит, когда транзакционный метод вызывает другой транзакционный метод?
- Как интегрировать весну с сеансом гибернации и управлением транзакциями?
- JPA / JTA / @Transactional Spring аннотация
- Использует ли атрибут Spring @Transactional собственный метод?
- Как использовать две или более базы данных с весной?
- @Transactional (распространение = Propagation.REQUIRED)
Для доступа к списку всех зарегистрированных пользователей вам нужно ввести экземпляр SessionRegistry в свой компонент.
@Autowired @Qualifier("sessionRegistry") private SessionRegistry sessionRegistry;
И затем, используя проверенный SessionRegistry, вы можете получить доступ к списку всех участников:
List
Но перед тем, как вводить сеансовый реестр, вам нужно определить часть управления сеансом в файле spring-security.xml (см. Раздел «Управление сеансом » в справочной документации Spring Security ), а в разделе «Управление параллелизмом» вы должны установить псевдоним для объекта реестра сеанса ( session-registry- псевдоним ), посредством которого вы будете вводить его.
...
В JavaConfig это будет выглядеть так:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { // ... http.sessionManagement().maximumSessions(1).sessionRegistry(sessionRegistry()); } @Bean public SessionRegistry sessionRegistry() { return new SessionRegistryImpl(); } @Bean public ServletListenerRegistrationBean httpSessionEventPublisher() { return new ServletListenerRegistrationBean (new HttpSessionEventPublisher()); } }
С вызывающим кодом, выглядящим следующим образом:
public class UserController { @Autowired private SessionRegistry sessionRegistry; public void listLoggedInUsers() { final List
Обратите внимание, что SecurityUser
– это мой собственный class, который реализует UserDetails
.
Пожалуйста, поправьте меня, если я ошибаюсь.
Я думаю, что ответ Адама является неполным. Я заметил, что сеансы, которые уже истекли в списке, появлялись снова.
public class UserController { @Autowired private SessionRegistry sessionRegistry; public void listLoggedInUsers() { final List
Надеюсь, поможет.
Пожалуйста, поправьте меня, если я ошибаюсь.
Я думаю, что ответ Адама и @ elysch является неполным. Я заметил, что необходимо добавить слушателя:
servletContext.addListener(HttpSessionEventPublisher.class);
в
public class AppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) { ... servletContext.addListener(HttpSessionEventPublisher.class); }
с безопасностью conf:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { // ... http.sessionManagement().maximumSessions(1).sessionRegistry(sessionRegistry()); } @Bean public SessionRegistry sessionRegistry() { return new SessionRegistryImpl(); } @Bean public HttpSessionEventPublisher httpSessionEventPublisher() { return new HttpSessionEventPublisher(); } }
И тогда вы получите онлайн-пользователей!