springboot google oauth2 и авторизация из бэкэнда - PullRequest
0 голосов
/ 01 апреля 2020

Я разрабатываю некоторый RestController и использую что-то вроде

@PreAuthorize(“hasRole(‘ADMIN')”)

для авторизации.

Я использую oauth (google API) для аутентификации. И я бы хотел использовать собственную БД для авторизации (управляемые и другие пользовательские данные). Каковы хорошие практики? Как я могу решить эту проблему (может использовать фильтр)?

1 Ответ

0 голосов
/ 02 апреля 2020

Если вы хотите использовать свою собственную базу данных для аутентификации, вы можете использовать интерфейс UserDetailsService, который используется для поиска имени пользователя, пароля и GrantedAuthorities для любого данного пользователя.

Этот интерфейс предоставляет только один метод, который должен реализовывать реализующий класс:

UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
  1. Создайте класс, который реализует этот интерфейс, и переопределите вышеуказанный метод для получения сведений о пользователе из вашей БД (аннотируйте этот класс с помощью аннотации @Service) Здесь вы можете вызвать вашу БД, чтобы получить информацию о пользователях, указав userName, и преобразовать ее в UserDetails.
  2. Создать собственный класс MyUserdetails, который реализует интерфейс UserDetails. И реализуйте все необходимые методы.
  3. Теперь создайте класс, скажем SecurityConfiguration, который расширяет WebSecurityConfigurerAdapter, аннотирует этот класс с помощью @EnableWebSecurity. (@EnableWebSecurity - это аннотация маркера. Она позволяет Spring находить (это @Configuration и, следовательно, поэтому , @Component) и автоматически применять класс к глобальной WebSecurity.) В этом классе autowire bean-компонент UserDetailsService и переопределить следующий метод для получения сведений о пользователях из вашей БД.
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }
Добавить следующую зависимость в вашу пом. xml
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
Также аннотируйте свой основной класс следующей аннотацией, чтобы сообщить Spring, что вы используете JPA
@EnableJpaRepositories(basePackageClasses = UserRepository.class)

Надеюсь, это поможет.

...