Управление параллельной сессией Spring Security - PullRequest
0 голосов
/ 27 января 2019

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

Класс конфигурации My Security:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    /*@Autowired
    private DataSource dataSource;*/

    private AccessDeniedHandler accessDeniedHandler;
    private AuthenticationSuccessHandler authenticationSuccessHandler;
    private AuthenticationFailureHandler authenticationFailureHandler;
    private UserDetailsService userDetailsService;

    @Autowired
    public SecurityConfiguration( 
            @Qualifier("customAccessDeneiedHandler")AccessDeniedHandler accessDeniedHandler,
            @Qualifier("customSuccessHandler")AuthenticationSuccessHandler authenticationSuccessHandler,
            @Qualifier("customAuthenticationFailureHandler")AuthenticationFailureHandler authenticationFailureHandler,
            @Qualifier("customUserDetailsService")UserDetailsService userDetailsService) {
        this.accessDeniedHandler = accessDeniedHandler;
        this.authenticationSuccessHandler = authenticationSuccessHandler;
        this.authenticationFailureHandler = authenticationFailureHandler;
        this.userDetailsService = userDetailsService;
    }


    /* (non-Javadoc)
     * @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder)
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // TODO Auto-generated method stub
        //super.configure(auth);

        auth.userDetailsService(userDetailsService)   //auth.userDetailsService(utilisateurDetailsService)
            .passwordEncoder(passwordEncoder());
    }

    //Authorization
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                //.antMatchers("/").permitAll()
                .antMatchers("/ajouterassure", "/ajouterattributaire", "/ajouterbeneficiaire", "/ajouterpiecejustificative",
                             "/creerbordereauemission", "/creerbehorscoordination", "/creerbordereaupaie", "/ajouteravance", 
                             "/creerbeavanceannuelle")
                            .hasAnyRole("DGA", "DGAA", "DR", "DRA", "CC", "CCA", "CI", "AS", "GUICHET", "CE", "CAP", "ADMIN") //.hasRole("ADMIN")

                .antMatchers("/ajoutercentre", "/ajouteretablissementpaie", "/ajoutertypepj", "/ajoutertypedette",
                             "/ajoutersexe", "/ajoutersituationbeneficiaire", "/ajoutercategoriebeneficiaire", 
                             "/ajoutercategorieattributaire", "/ajouterrevalorisation").hasAnyRole("DGA", "ADMIN")  //hasAnyRole("CAP", "ADMIN")
                .antMatchers("/payerdecompte").hasAnyRole("CAISSIER", "ADMIN")
                .antMatchers("/ajouterutilisateur").hasAnyRole("CI", "ADMIN")
                .anyRequest().authenticated()
                .and()
                //.httpBasic()
            .formLogin()
                .loginPage("/login")
                //.loginProcessingUrl("/login")
                .usernameParameter("identifiant")
                .passwordParameter("mot_de_passe")
                .successHandler(authenticationSuccessHandler)
                .failureHandler(authenticationFailureHandler)
                //.defaultSuccessUrl("/")
                .permitAll()
                .and()
            .logout().permitAll()
                    .and()
                .sessionManagement()            //Session controle concurence access
                    .maximumSessions(1)
                    .expiredUrl("/login?expired")
                    .sessionRegistry(sessionRegistry);

        http.exceptionHandling().accessDeniedHandler(accessDeniedHandler);

        //Session controle concurence access
        //http.sessionManagement().maximumSessions(1);
    }

    /* (non-Javadoc)
     * @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.web.builders.WebSecurity)
     */
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**", "/resources/templates/errors/**", "/static/**", "/css/**", "/images/**", "/var/signatures/**");
        //web.ignoring().antMatchers("/static/**");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public HttpSessionEventPublisher httpSessionEventPublisher() {
        return new HttpSessionEventPublisher();
    }



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

    @Autowired
    @Lazy
    private SessionRegistry sessionRegistry;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...