Для этого случая использования мы можем создать новое приложение Spring Boot (в основном называемое API-шлюзом), которое включает прокси Zuul ( EnableZuulProxy ). Создайте пользовательский фильтр Zuul PRE_TYPE
, который анализирует все входящие запросы. Его целью было бы проверить, содержит ли входящий запрос токен, затем вызвать службу аутентификации, получить информацию о вызывающем абоненте и добавить идентификатор пользователя в пользовательский заголовок.
Как только входящий запрос будет пропущен через все фильтры, используйте свойства zuul.routes.*
для пересылки запроса соответствующим службам.
Для вызова удаленной службы (в этом случаев случае службы аутентификации) мы можем использовать класс Spring * RemoteTokenServices . И BearerTokenExtractor класс для извлечения токена из входящих запросов. Вот пример кода, с которого можно начать:
@Override
public Object run() {
final RequestContext requestContext = RequestContext.getCurrentContext();
final HttpServletRequest request = removeCustomHeaders(requestContext.getRequest());
requestContext.setRequest(request);
final Authentication authentication = tokenExtractor.extract(request);
if (Objects.nonNull(authentication)) {
try {
final OAuth2Authentication oAuth2Authentication = tokenServices.loadAuthentication(authentication.getPrincipal().toString());
final Map<String, String> userAuthDetails = (Map<String, String>) oAuth2Authentication.getUserAuthentication().getDetails();
requestContext.addZuulRequestHeader(USERNAME_HEADER, oAuth2Authentication.getPrincipal().toString());
// Add other required information in headers.
}
catch(final AuthenticationException | RestClientException |OAuth2Exception e){