Понимание аутентификации и управления сеансами с помощью Spring boot

Я сделал проект весенней загрузки с mongo db в качестве бэкэнда. Я хочу убедиться, что пользователи аутентифицированы и авторизованы, сохраняя при этом какой-то сеанс в памяти (используя Redis или что-то еще во встроенном весеннем сеансе)
Я прошел через множество турориалов, таких как это, это, это и т. д.

Все они просят вас расширить WebSecurityConfigAdapter, настроить HttpSecurity и предоставить UserDetailService. Что я и сделал следующим образом.

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public UserDetailsService userDetailsService(){
        return new StockUserDetailService();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/login/**").permitAll()
                .antMatchers("/logout/**").permitAll()
                .antMatchers("/admin/**").hasAuthority("ADMIN")
                .antMatchers("/broker/**").hasAnyAuthority("BROKER")
                .anyRequest().fullyAuthenticated();
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService());
    }
}

Но чего я не понимаю, так это того, где происходит управление сеансом и что такое url, который пользователь должен использовать для входа в систему? Если я напишу контроллер с сопоставлением для /login, каким должно быть мое действие внутри контроллера входа в систему. Я действительно не понимаю всей картины.



ОБНОВЛЕНИЕ

Я попытался отправить сообщение на /login. я получаю эту ошибку

{
"timestamp": 1494842451672,
"status": 403,
"error": "Forbidden",
"message": "Could not verify the provided CSRF token because your session was not found.",
"path": "/login"
}

person Ashwin    schedule 15.05.2017    source источник


Ответы (1)


Spring управляет маршрутом /login за вас. Вам просто нужно отправить ему запрос POST с учетными данными пользователя. Если вы хотите указать другой URL-адрес для входа, вы можете сделать это с помощью .loginProcessingUrl("/myCustomLoginUrl"). Для UserDetailsService вы должны предоставить свою собственную реализацию, которая реализует метод loadUserByUsername(String userName), который извлекает пользователя из базы данных или любого используемого вами постоянного хранилища и возвращает org.springframework.security.core.userdetails.User с соответствующими полномочиями. См. следующие официальные документы: https://spring.io/guides/gs/securing-web/

person balag3    schedule 15.05.2017
comment
Пробовал писать в /login. Но выдает запрещенную ошибку. проверить мое обновление - person Ashwin; 15.05.2017
comment
Это проблема токена CSRF. Либо укажите токен csrf в скрытом поле в вашей форме, либо отключите его в конфигурации безопасности с помощью .csrf(). disable() - person balag3; 15.05.2017