Динамические значения перехватчика запроса Feign - PullRequest
0 голосов
/ 31 октября 2018

Я являюсь клиентом некоторых API, которым мне нужно отправлять токен в каждом запросе, и чтобы получить этот токен, мне нужно получить доступ к /auth/token отправке имени пользователя и пароля и подумать об использовании перехватчика запросов для его решения. , Но имя пользователя и пароль отличаются для каждого запроса, есть какой-то способ использовать динамические значения в перехватчике симметричного запроса или перед каждым вызовом API мне нужно будет вызывать /auth/token с помощью обычного симулированного клиента?

У меня есть Service, который обращается к этому API токена

@Service
@RequiredArgsConstructor
public class AuthService {
  private final AuthClient client;
  private final AuthProperties properties;

  @Cacheable("tokens")
  public AuthToken getToken(AuthUser user) {
      return client.authenticate(properties.getClientId(), properties.getSecret(), user.getUser(),
            user.getPassword());
  }
}

Симулированный клиент для доступа к API токена

public interface AuthClient {
  @RequestLine("GET /token?client_id={client_id}&client_secret={client_secret}&grant_type=password&username={username}&password={password}")
  AuthToken authenticate(@Param("client_id") String client_id, @Param("client_secret") String client_secret,
                            @Param("username") String username, @Param("password") String password);
}

И RequestInterceptor, который использует эту услугу

@RequiredArgsConstructor
public class AuthRequestInterceptor implements RequestInterceptor {

  private final AuthUser user;
  @Autowired
  private final AuthService authService;

  @Override
  public void apply(RequestTemplate template) {
    AuthToken token = authService.getToken(user);
    template.header("Authorization", "Bearer " + token.getAccess_token());
  }
}

Я не уверен, как добавить этот перехватчик при построении симулированного клиента, чтобы установить пользователя для запроса

1 Ответ

0 голосов
/ 20 мая 2019

При использовании Spring вам необходимо зарегистрировать RequestInterceptor как @Bean, чтобы автоматически применить его. Если вы не используете Spring или не собираете Feign Clients вручную, зарегистрируйте перехватчик, используя метод Feign.builder.interceptor().

...