gpt4 book ai didi

java - Feign请求拦截器动态值

转载 作者:行者123 更新时间:2023-12-02 10:38:46 24 4
gpt4 key购买 nike

我是一些 API 的客户端,我需要在每个请求中发送一个 token ,为了获取此 token ,我需要访问 /auth/token 发送用户名和密码,并认为关于使用请求拦截器来解决它。但是每个请求的用户名和密码都不同,有某种方法可以在 feign 请求拦截器中使用动态值,或者在每次 API 调用之前我需要使用普通 feign 客户端调用 /auth/token

我有一个访问此 token 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());
}
}

一个访问 token 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());
}
}

我不确定在构建 feign 客户端以设置每个请求的用户时如何添加此拦截器

最佳答案

使用 Spring 时,您需要将 RequestInterceptor 注册为 @Bean 才能自动应用它。如果您没有使用 Spring,或者手动构建 Feign 客户端,请使用 Feign.builder.interceptor() 方法注册拦截器。

关于java - Feign请求拦截器动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53085554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com