Фильтр ролей OAuth2 Spring Boot

Я использую spring-cloud-security и @ EnableOAuth2Sso на сервере конфигурации Spring для настройки oauth2. После того, как мой провайдер oauth аутентифицирует пользователя, я хочу проверить правильность роли пользователя. Моя первая мысль, что мне нужно добавить фильтр, который запускается после аутентификации oAuth. Нужно ли мне расширять WebSecurityConfigurerAdapter и добавлять фильтр? Если да, не могли бы вы предоставить образец кода, как это сделать? Я провел несколько поисков, пытаясь собрать это воедино, но безуспешно.

1
0
350
2

Ответы 2

Вы можете проверить роли во время аутентификации и для этого написать собственную реализацию UserDetailsService. Это вызывается во время аутентификации DaoAuthenticationProvider для загрузки сведений о пользователе.

@Override
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {
    final AbstractUser user = Optional.ofNullable((AbstractUser) userRepository.findUserByUsername(username)).orElseGet(() -> userTempRepository.findUserByUsername(username));

    if (Objects.isNull(user)) {
        throw new UsernameNotFoundException(String.format("Username \'%s\' not found.", username));
    }

    final boolean accountNonLocked = USER_STATUS_ACTIVE.equalsIgnoreCase(user.getStatus());

    final List<GrantedAuthority> grantedAuthorities = user.getRoles() == null
                                                      ? Collections.emptyList()
                                                      : user.getRoles().stream()
                                                            .map(SimpleGrantedAuthority::new)
                                                            .collect(Collectors.toList());


    return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), true, true,
                                                                  true, accountNonLocked, grantedAuthorities);
}

Я реализовал метод rulesExtractor, как описано в учебнике это. Это дало мне доступ к возвращенной информации oAuth и позволило мне проверить правильность роли пользователя. Кажется, это делает то, что мне нужно.

Я хотел бы реализовать это в WebSecurityConfigurerAdapter.configure с hasAnyRole, но я не мог понять, как это сделать.

Другие вопросы по теме