Я понимаю, что вы не спрашивали об этом, но установка дополнительных прав доступа из заголовка звучит немного рискованно, если вы не доверяете его происхождению (например, оно подписано или аналогично).Это звучит странно, поскольку причина использования OAuth обычно заключается в том, что полномочия выдачи полномочий выдаются только сервером авторизации.
Поскольку вы уже используете DefaultUserAuthenticationConverter
, я хотел бы знать, сможете ли вы получить те же дополнительные полномочияиз бэкэнда, скажем, через экземпляр UserDetailsService
?
Тем не менее, чтобы ответить на ваш вопрос, вы можете добавить фильтр:
public class XGroupFilter extends OncePerRequestFilter {
// ... look up current Authentication
// ... look up and validate header
// ... create new instance of Authentication, adding the new authorities
}
И затем зарегистрировать его:
@Configuration
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) {
// ...
http.addFilterAfter(new XGroupFilter(), OAuth2AuthenticationProcessingFilter.class);
}
}
Или, если у вас есть возможность обновления, то появилась новая поддержка в Spring Security 5.1 , которая немного упрощает ситуацию.Сейчас вы используете устаревший плагин-проект под названием Spring Security OAuth, но поддержка теперь встроена изначально .Кроме того, именно здесь появляются новые функции, что делает его ценным для начала, если вы не слишком далеко зашли по пути Spring Security OAuth.
В этом случае конфигурация все еще очень похожа:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) {
// ...
http.addFilterAfter(new XGroupFilter(), BearerTokenAuthenticationFilter.class);
}
}