我正在将带有JWT令牌的Spring Security OAuth2集成到Spring Boot项目中。我的身份验证服务器的配置类似于在此sample project中找到的内容。
OAuth2客户端在/oauth/token
上执行POST时,无法创建访问令牌。记录的特定错误是:o.s.s.o.provider.endpoint.TokenEndpoint : Handling error: NoSuchBeanDefinitionException, No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined
我在调用AbstractTokenGranter
时将其调试到了tokenServices.createAccessToken
70行。除此以外,我无法轻松地进行进一步调试,因为此调用实际上是通过代理进行的。似乎配置中的某些内容想要使之具有事务性。在JWT中创建访问令牌不应该是事务性的。我可以理解为什么检索访问代码将是事务性的,但是代码成功地超过了这一点。
为什么这可能需要PlatformTransactionManager
,我该如何提供?
最佳答案
问题是您在应用程序中使用new InMemoryTokenStore()
配置了内存数据库的用法,但是spring-boot应用程序不包含内存数据库。
解决方案:在spring-boot pom或gradle依赖项中添加内存数据库。
H2和Maven pom的示例:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.187</version>
</dependency>