How can I have list of all users logged in (via spring security) my web application

后端 未结 7 2332
独厮守ぢ
独厮守ぢ 2020-11-27 12:27

I\'m using spring security in my web application, and now I want to have a list of all users who are logged in my program.

How can I have access to that list? Aren\'

7条回答
  •  没有蜡笔的小新
    2020-11-27 12:28

    In JavaConfig, it would look like this:

    @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());
        }
    }
    

    With the calling code looking like this:

    public class UserController {
        @Autowired
        private SessionRegistry sessionRegistry;
    
        public void listLoggedInUsers() {
            final List allPrincipals = sessionRegistry.getAllPrincipals();
    
            for(final Object principal : allPrincipals) {
                if(principal instanceof SecurityUser) {
                    final SecurityUser user = (SecurityUser) principal;
    
                    // Do something with user
                    System.out.println(user);
                }
            }
        }
    }
    
    
    

    Note that SecurityUser is my own class which implements UserDetails.

    提交回复
    热议问题