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