Добавить роль весной с помощью настраиваемого userDetailsService с использованием проверки подлинности okta

Я следил за этим замечательным уроком: https://developer.okta.com/blog/2020/01/06/crud-angular-9-spring-boot-2#spring-boot-as-an-oauth-2-0-resource-server

Я хотел бы добавить Роли в весеннюю часть. Я не хочу использовать утверждения, подобные этому tuto https://developer.okta.com/blog/2018/09/26/build-a-spring-boot-webapp, но я хотел бы добавить свою таможенную роль (из моей собственной базы данных).

Я попытался переопределить userDetailsService () из WebSecurityConfigurerAdapter, чтобы использовать мой пользовательский UserDetailService. Но похоже, что этот метод никогда не вызывается… (см. Println), не так ли?

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserRepository userRepository;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //@formatter:off
        http
                .authorizeRequests()
                .antMatchers("/home/**").permitAll()
                .antMatchers("/admin/**").hasAuthority("ADMIN")
                .anyRequest().authenticated()
                .and()
                    .oauth2Login()
                .and()
                    .oauth2ResourceServer().jwt();
        //@formatter:on
    }

    @Override
    protected UserDetailsService userDetailsService() {
        return username -> {
            System.out.println("yo");
            Optional<co.simplon.blog.model.User> user = userRepository.findByName(username);

            return User
                    .withUsername(username)
                    .password(user.get().getPassword())
                    .authorities(Arrays.asList(user.get().getRole()))
                    .accountExpired(false)
                    .accountLocked(false)
                    .credentialsExpired(false)
                    .disabled(false)
                    .build();
        };
    }


}

person Josselin Tobelem    schedule 23.03.2020    source источник
comment
Привет, @Josselin. Не могли бы вы разобраться в этой проблеме. У меня такое же требование. Но решения не нашел.   -  person Biky    schedule 15.09.2020
comment
Привет @biky, я не разбирался в этой проблеме. Для меня было нормально использовать jwt (spring) + firebase (angular).   -  person Josselin Tobelem    schedule 16.09.2020


Ответы (1)


вам нужно добавить реализацию UserDetailsService в WebConfigurerSEcurityAdapter:

    @Override
public void configure(AuthenticationManagerBuilder builder)
        throws Exception {
    builder.userDetailsService(new MyUserDetailsService());
}

Затем вы увидите, что ваша реализация начнет вызываться.

person Fabio Cabrini    schedule 12.04.2020