app+rbac:No bean resolver registered in the context to resolve access to bean 'rbacService'

来源:7-4 基于数据库Rbac数据模型控制权限

j2tech

2018-01-30

复现步骤:(底部附解决方案)

  1. git clone讲师源码

  2. 更改test依赖(特殊说明:为browser依赖时正常)

//img.mukewang.com/szimg/5a701d7e00011ae807680313.jpg

    3. 成功启动项目,访问请求报错核心:

       (1) java.lang.IllegalArgumentException: Failed to evaluate expression '#oauth2.throwOnError(@rbacService.hasPermission(request, authentication))'

        (2)Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1057E: No bean resolver registered in the context to resolve access to bean 'rbacService'

    

========================================================================

    解决方案:

    

    使用demo工程也是一样的,最终源码里可能重构后动了版本,

    我找到了是oauth的bug(详见:https://github.com/spring-projects/spring-security-oauth/issues/730#issuecomment-219480394),

    可在源码ImoocResourceServerConfig类中加入以下代码即可解决:

     @Bean

     public OAuth2WebSecurityExpressionHandler oAuth2WebSecurityExpressionHandler(ApplicationContext applicationContext) {

     OAuth2WebSecurityExpressionHandler expressionHandler = new OAuth2WebSecurityExpressionHandler();

     expressionHandler.setApplicationContext(applicationContext);

     return expressionHandler;

     }

    

     @Autowired

     private OAuth2WebSecurityExpressionHandler expressionHandler;

    

     @Override

     public void configure(ResourceServerSecurityConfigurer resources) throws Exception {

     resources.expressionHandler(expressionHandler);

     }


写回答

4回答

飘香随云

2018-09-18

你好,为啥我用这段后,authentication里面的认证信息变成匿名访问账户了,。

1
1
Man傅
问题解决了吗?
2019-03-03
共1条回复

beyond_0012

2018-05-15

困扰了好久的问题,谢谢

0
0

丽濡

2018-01-31

非常感谢

0
0

JoJo

2018-01-31

额...代码就是为Browser写的,不是为app写的,因为WebExpressionVoter只有在web环境中才会配置。

0
5
j2tech
回复
丽濡
我重新编辑了问题可以解决(附解决方案)
2018-01-31
共5条回复

Spring Security技术栈开发企业级认证与授权

Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全

2662 学习 · 1561 问题

查看课程