Spring OAuth - 没有类型为PlatformTransactionManager的限定bean

时间:2016-03-03 05:36:24

标签: spring-mvc spring-security spring-security-oauth2 spring-oauth2

我成功地通过替换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制作如此简单易懂的示例)

我正在使用:

  • Spring 4.2.5
  • Spring Security 4.0.4
  • Spring OAuth 2.0.9
  • (没有春靴)

1 个答案:

答案 0 :(得分:0)

问题是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 {

            }
        };
    }