Я являюсь клиентом некоторых 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());
}
}
Я не уверен, как добавить этот перехватчик при создании имитационного клиента, чтобы установить пользователя для каждого запроса