通过替换 BASIC auth,我成功地将 OAuth2 集成到我以前的应用程序(REST 服务)中。
然后我得到以下异常:
No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single matching bean but found 2: transactionManagerDB2,transactionManager
当我取出 bean 时
transactionManagerDB2
它开始工作正常。我有 2 个事务管理器,因为我有 2 个连接的数据库。
因为我有一个
InMemoryTokenStore
,我很好奇 TransactionManager
的需求. (以及为什么 Oauth 无法在默认名称下选择“transactionManager”)不知何故,我通过
configureGlobal(AuthenticationManagerBuilder auth){}
配置了一个 CustomeUserDetailService ,以前和现在使用单个 TransactionManager 都可以正常工作。我用过 sparklr-boot Spring Boot 应用程序将 OAuth 与我的应用程序集成。
(感谢 Dave Syer 做出如此简单易懂的例子)
我正在使用:
最佳答案
问题是 DefaultTokenServices 中的方法是用 @Transactional 注释的。因此,即使您不使用数据库,您也需要在授权服务器配置中添加这样的事务管理器 bean:
@Bean
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new ResourceTransactionManager() {
@Override
public Object getResourceFactory() {
return null;
}
@Override
public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException {
return null;
}
@Override
public void commit(TransactionStatus status) throws TransactionException {
}
@Override
public void rollback(TransactionStatus status) throws TransactionException {
}
};
}
关于spring-mvc - Spring OAuth - 没有 PlatformTransactionManager 类型的合格 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35764036/