Обнаружение одновременных входов в систему в загрузочном веб-приложении Angular JS + Spring - PullRequest
0 голосов
/ 12 мая 2018

Я хочу иметь возможность обнаруживать одновременные входы в систему и позволять пользователю решать, какое действие выбрать. При обнаружении одновременного входа в систему я бы хотел, чтобы новый пользователь выбрал из следующих вариантов:

  • войти и выйти из системы старого пользователя

  • отменить регистрацию нового пользователя, чтобы старый пользователь все еще входил в систему.

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете контролировать это, если используете spring-security.Следующий пример кода предназначен для веб-приложения с весенней загрузкой, использующего зависимости spring-boot-starter-web и spring-boot-starter-security (а также, при необходимости, вариант Spring-сеанса). Предполагается, что вы не хотите более 2 одновременных входов от одного и того же пользователя, и выхотите предотвратить будущие входы в систему:

@Configuration
@EnableWebSecurity
public class AppSecurityConfig extends WebSecurityConfigurerAdapter {

   //override this method as required
   public UserDetailsService userDetailsService() {} 


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement()
             .maximumSessions(2)
             .maxSessionsPreventsLogin(true)//prevents login for > 2attempts and sends to the authentication-failure-url
             .sessionRegistry(sessionRegistry());
    }

    @Bean
    public SessionRegistry sessionRegistry() {
        return new SessionRegistryImpl();
    }
}

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

Дополнительную информацию можно найти в документации по https://docs.spring.io/spring-security/site/docs/5.0.5.RELEASE/reference/htmlsingle/#concurrent-sessions

...