Как добавить информацию о пользователе из БД в «inMemoryAuthentication» - PullRequest
0 голосов
/ 06 марта 2019

Поскольку я хочу создать REST API, который использует идентификатор сеанса в качестве токена, я искал пример для обеспечения безопасности Spring, в этом случае они жестко запрограммировали код для установки информации пользователя для аутентификации в памяти.

 @Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("testt").password("password").roles("USER");
}

ИтакКак установить информацию о пользователе из БД, имя которого совпадает с именем пользователя userName, указанным клиентом для inMemoryAuthentication?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Интерфейс UserDetailsService - это то, что вы ищете, хотя он не используется в сочетании с аутентификацией в памяти.

  • Аутентификация в памяти : пользователь указывает имена пользователей и пароли, и они хранятся только в памяти
  • Custom UserDetailsService : пользователь указывает способ получения имен пользователей и паролей

Чтобы предоставить свой собственный UserDetailsService, вы можете просто представить его как боб (нет необходимости использовать AuthenticationManagerBuilder)

@Bean
public UserDetailsService userDetailsService() {
    return username -> {
        MyUser myUser = this.myUserRespository.findByUsername(username);
        return new MyUserDetails(myUser);
    };
}

Обратите внимание, что UserDetailsService возвращает экземпляр UserDetails, который является интерфейсом Spring Security. Поэтому рекомендуется также создать простой объект-мост, который расширяет любой объект вашего домена для вашего пользователя:

private static class MyUserDetails extends MyUser implements UserDetails {
    public MyUserDetails(MyUser myUser) {
        super(myUser);
    }

    // ... implement UserDetails methods

}
2 голосов
/ 06 марта 2019

Вы должны реализовать UserDetailsService интерфейс, а также вам потребуются некоторые классы сущностей, такие как User и Authority.

 @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        /* auth.inMemoryAuthentication().withUser("admin")
                .password("{noop}admin").roles("ADMIN")
                .and()
                .withUser("chief").password("{noop}chief")
                .roles("CHIEF"); 
        */
      auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

Пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...