Управление сессиями с весенней безопасностью - PullRequest
0 голосов
/ 19 сентября 2018

Мне нужно реализовать управление сессиями с помощью Spring Security.

  1. Я хочу, чтобы HttpSession начал работу только при успешном входе в систему
  2. Как добавить зарегистрированных пользователейдетали в сессию

Но в моем коде сессия создается при загрузке самой страницы входа ..

Мой SecurityConfig классздесь:

public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.inMemoryAuthentication().withUser("akashm").password("akash123").authorities("ROLE_ADMIN", "ROLE_USER");
        auth.inMemoryAuthentication().withUser("girishp").password("girish123").roles("USER");
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {

            http
            .authorizeRequests()
            .antMatchers("/homePage").access("hasRole('ROLE_USER')")
            .antMatchers("/myProfile").hasRole("USER")
            .antMatchers("/viewUsers").access("hasRole('ROLE_ADMIN')")
            .and()
            .formLogin().loginPage("/login")
            .defaultSuccessUrl("/homePage")
            .failureUrl("/login?error")
            .usernameParameter("email")
            .passwordParameter("pswd")
            .and()
            .logout()
            .logoutSuccessUrl("/login?logout")
            .invalidateHttpSession(true)
            .deleteCookies("JSESSIONID")
            .and()
            .exceptionHandling()
            .accessDeniedPage("/accessDenied")
            .and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
            .invalidSessionUrl("/login?invalid")
            .sessionAuthenticationErrorUrl("/login?invalid");
    }

    @Bean
    public HttpSessionEventPublisher httpSessionEventPublisher() { //enabling the concurrent session-control support
        return new HttpSessionEventPublisher();
    }
}
  • Справочные ссылки допустимы

1 Ответ

0 голосов
/ 19 сентября 2018

Вам необходимо зарегистрировать ApplicationListener с событием InteractiveAuthenticationSuccessEvent, чтобы заполнить сеанс необходимыми данными пользователя.

@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {

    @Autowired 
    HttpSession httpSession;

    @Override
    public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
    {
        //Do whatever with httpSession object
    }
}

Я хочу, чтобы HttpSession запускался только при успешном входе в систему

HttpSession может быть @Autowired, так как оба являются бобами пружины.

Но в моем коде сессия создается при загрузке самой страницы входа в систему ..

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

...