有2个微服务,一个休息服务是websocket服务 . Websocket服务假装客户端与其他服务进行通信 .
当从浏览器工具(例如邮递员)调用休息服务时,呼叫正常工作 . 我们只传递 Headers Authorization
,其值为 Bearer XXXXX
当没有拦截器从假装打电话时,我们得到401:未经授权,这是正确的行为 .
将此拦截器添加到代码库时,当然XXXXX是真正的令牌,我们收到403
@Component
public class FeignOauth2Interceptor implements RequestInterceptor {
private static final String AUTHORIZATION_HEADER = "Authorization";
@Override
public void apply(RequestTemplate template) {
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication =
securityContext.getAuthentication();
template.header(AUTHORIZATION_HEADER, "Bearer XXXXX");
}
}
调用拦截器,因为我们在添加它后会看到不同的错误代码,我们从401转到403 .
我们在这里失踪了什么?
提前致谢
1 回答
我认为你的令牌在拦截器中的硬编码不是一个好主意,你可以从 OAuth2AuthenticationDetails 获得一个令牌:
此外,您可以使用 OAuth2FeignRequestInterceptor ,它从上下文中获取您的令牌,并在需要时自行刷新它 . 在我看来,这是一个更好的解决方案 . 您可以在此处找到使用它的示例:https://stackoverflow.com/a/53454703/10697598