在 Spring Boot 中安排 OAuth + Feign
Posted
技术标签:
【中文标题】在 Spring Boot 中安排 OAuth + Feign【英文标题】:OAuth + Feign with Scheduled in Spring Boot 【发布时间】:2017-01-21 16:29:37 【问题描述】:我有两个不时相互通信的 Spring Boot 应用程序。其中一种方法是 Feign 客户端使用 @Scheduled 发送请求。
我正在使用 RequestInterceptor 从 restTemplate 添加授权令牌。
@Component
@Scope("prototype")
public class OAuthInterceptor implements RequestInterceptor
@Autowired
private OAuth2RestOperations restTemplate;
@Autowired
private AppContext appContext;
@Override
public void apply(RequestTemplate requestTemplate)
if (appContext != null)
...
requestTemplate.header("Authorization", "bearer " + restTemplate.getAccessToken());
问题是,appContext 在通过 Scheduled 执行时总是不同于 null 事件。如果通过请求执行,则可以正常工作。
如何配置以检查此拦截器是按计划执行的还是按用户请求执行的?
错误是:
No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
这里是 AppContext ,其中包含有关用户会话的一些信息,当通过 Scheduled 执行时,我不需要查看它。
@Component
@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS, value="session")
public class AppContext implements Serializable
...
【问题讨论】:
一个讨厌的解决方案是尝试捕获 BeanCreationException,但我希望有一个适当的解决方案来解决这个问题。 【参考方案1】:在Feign and Spring Security 5 - Client Credentials 上查看我的回复。我认为 AppContext 和 OAuth2RestOperations 的使用会弄乱你的代码。你应该避免它。
【讨论】:
以上是关于在 Spring Boot 中安排 OAuth + Feign的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot + Spring OAuth Java 配置
Spring Boot 和 OAuth2 社交登录,无法获取 refreshToken
在 Spring Boot OAuth2 中跳过 OAuth 用户批准
在 Spring Boot OAuth2RestOperations 中刷新 OAuth 令牌
独立资源服务器(Spring Boot 2 + OAuth + JWT)在 Spring-boot 从 1.2.x 升级到 2.x 后给出 UsernameNotFoundException