首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >spring安全oauth2 ClassCastException配置DefaultTokenServices

spring安全oauth2 ClassCastException配置DefaultTokenServices
EN

Stack Overflow用户
提问于 2015-04-24 10:24:40
回答 5查看 5K关注 0票数 7

我正在尝试使用spring和security运行一个示例应用程序,其中配置了一个JdbcTokenStore和一个具有无限生存期访问令牌的DefaultTokenServices。

使用gradle bootRun运行这个应用程序,应用程序将不会启动并抛出一个“由: java.lang.ClassCastException: com.sun.Proxy引起的”。$Proxy51不能转换为bootRun

为什么有一个代理包在DefaultTokenServices bean周围?

奇怪的是-使用InMemoryTokenStore运行应用程序.一切都很好(见内存分支)。

源代码demo/blob/master/src/main/java/demo/AuthorizationServerConfiguration.java

全跟踪:http://pastebin.com/SUcwz4S5

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-04-28 20:27:11

DefaultTokenService内部的快速查看显示,它使用@Transactional进行注释。Spring将将其封装在代理中以服务事务--因此您需要通过它的接口与类进行交互。

对于您的tokenService bean:

代码语言:javascript
运行
复制
@Bean
public DefaultTokenServices tokenServices() {
    final DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
    defaultTokenServices.setAccessTokenValiditySeconds(-1);
    defaultTokenServices.setTokenStore(tokenStore());
    return defaultTokenServices;
}

尝试将其更改为:

代码语言:javascript
运行
复制
@Bean
public AuthorizationServerTokenServices tokenServices() {
    final DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
    defaultTokenServices.setAccessTokenValiditySeconds(-1);
    defaultTokenServices.setTokenStore(tokenStore());
    return defaultTokenServices;
}
票数 9
EN

Stack Overflow用户

发布于 2015-04-27 10:15:08

我的应用程序中也有类似的异常,当将spring版本从2.0.7更改为2.0.3时,version起了作用。也许这是最新版本中的一个bug?

编辑:,从错误来看,问题似乎与spring创建的代理有关。当我将代理类型更改为CGLIB而不是默认的动态代理时,它也适用于2.0.7版本。此设置可以通过proxyTargetClass属性@EnableTransactionManagement(proxyTargetClass = true)设置。

但是,这个解决方案对我没有吸引力,因为我更喜欢默认的代理方法,而不是CGLIB。这里还有一篇解释代理方法http://thecafetechno.com/tutorials/spring/spring-proxying-mechanisms/的文章

票数 3
EN

Stack Overflow用户

发布于 2015-05-20 05:41:13

这适用于2.0.7版。

代码语言:javascript
运行
复制
 @Primary
 @Bean
 protected AuthorizationServerTokenServices tokenServices() throws Exception{

在将DefaultTokenServices更改为AuthorizationServerTokenServices之后,Spring将引发一个错误:

没有定义org.springframework.security.oauth2.provider.token.ResourceServerTokenServices类型的合格bean :预期的单个匹配bean,但发现3: defaultAuthorizationServerTokenServices、consumerTokenServices、tokenServices“}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29845016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档