У меня есть проект с Spring security и Oauth2.
На сервере ресурсов у меня есть следующая конфигурация:
@Configuration
public class SecurityConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(final HttpSecurity http) throws Exception {
http.antMatcher("/**")
.authorizeRequests().antMatchers("/info", "/health", "/h2-console/**").permitAll()
.anyRequest().authenticated()
.and().headers().frameOptions().disable();
}
}
У меня есть следующие экстракторы:
@Component
public class InsurancePrincipalExtractor implements PrincipalExtractor {
@Override
public Object extractPrincipal(Map<String, Object> map) {
return map.get("username");
}
}
@Component
public class InsuranceAuthoritiesExtractor implements AuthoritiesExtractor {
@Override
public List<GrantedAuthority> extractAuthorities(Map<String, Object> map) {
//Logic
}
Я установил user-info-uri: http://localhost:8081/uaa/v1/me
Проблема в том, что он не затрагивает мои методы извлечения во время выполнения, поэтому ничего не происходит. Как я знаю, мне просто нужно аннотировать его с помощью @Component и Spring, и я буду использовать его автоматически.
UPDATE :
Решение найдено.
Мне также пришлось добавить это в мою конфигурацию:
@Bean
protected ResourceServerTokenServices resourceServerTokenServices(ResourceServerProperties sso,
OAuth2ClientContext oauth2ClientContext,
UserInfoRestTemplateFactory restTemplateFactory) {
UserInfoTokenServices services = new UserInfoTokenServices(sso.getUserInfoUri(), sso.getClientId());
services.setRestTemplate(restTemplateFactory.getUserInfoRestTemplate());
services.setTokenType(sso.getTokenType());
return services;
}