Spring Security OAuth2 PrincipalExtractor не работает - PullRequest
0 голосов
/ 20 октября 2018

Я только что попытался сохранить данные для входа пользователя OAuth2 в db (h2) с использованием PrincipalExtractor, но мне это не помогло.После входа в систему нет никакой реакции от PrincipalExtractor, хотя я зарегистрировал компонент.База данных и аутентификация работает отлично.

application.yml (часть безопасности)

  security:
    oauth2:
      client:
        registration:
          discord:
            client-id: "secret"
            client-secret: "secret"
            clientAuthenticationMethod: post
            clientAuthenticationScheme: form
            authorizationGrantType: authorization_code
            scope:
              - identify
            redirectUriTemplate: "{baseUrl}/login/oauth2/code/discord"
            clientName: discordms
        provider:
          discord:
            authorizationUri: https://discordapp.com/api/oauth2/authorize
            tokenUri: https://discordapp.com/api/oauth2/token
            userInfoUri: https://discordapp.com/api/users/@me
            usernameAttribute: username

класс PrincipalExtractor

public class DiscordPrincipalExtractor implements PrincipalExtractor {

  private final UserRepository userRepository;

  public DiscordPrincipalExtractor(UserRepository userRepository) {
    this.userRepository = userRepository;
  }

  @Override
  public Object extractPrincipal(Map<String, Object> map) {
    Optional<UserEntityImpl> user = this.userRepository.findById((long) map.get("id"));

    if (!user.isPresent()) {
      user = Optional.of(new UserBuilder()
          .withIdentifier((long) map.get("id"))
          .withUsername((String) map.get("username"))
          .withDiscriminator((int) map.get("discriminator"))
          .withAvatarHash((String) map.get("avatar"))
          .withLocale((String) map.get("locale"))
          .withAvatarUrl("https://cdn.discordapp.com/" + map.get("id") + "/" + map.get("avatar"))
          .withCreated(LocalDateTime.now())
          .withLastLogin(LocalDateTime.now())
          .build());
    } else {
      user.get().setLastLogin(LocalDateTime.now());
    }

    this.userRepository.save(user.get());

    return user.get();
  }

}

и класс конфигурации безопасности

@Configuration
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
        .oauth2Login()
        .loginPage("/login")
        .tokenEndpoint()
        .accessTokenResponseClient(new RestOAuth2AccessTokenResponseClient(this.restOperations()))
        .and()
        .userInfoEndpoint()
        .userService(new CustomOAuth2UserServiceImpl(this.restOperations()));
  }

  @Bean
  public PrincipalExtractor principalExtractor(UserRepository userRepository) {
    return new DiscordPrincipalExtractor(userRepository);
  }

  @Bean
  public RestOperations restOperations() {
    return new RestTemplate();
  }

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