spring boot集成shiro,使用java annotation配置而不是xml配置的经验

主要麻烦在于LifecycleBeanPostProcessor和AuthorizationAttributeSourceAdvisor的配置。
LifecycleBeanPostProcessor可以配成static的,但AuthorizationAttributeSourceAdvisor依赖securityManager,所以就不太方便配成static的了。
因为securityManager会依赖realm,而realm往往需要依赖dataSource这样的bean,比如JdbcRealm。但AuthorizationAttributeSourceAdvisor在注入的时候,dataSource还没有被注入进来,这时用@Autowired DataSource dataSource,注入的会是个null。
那么怎么办呢?
解决办法是需要把securityManager和realm先各自独立的注入进来,然后再找个地方组装
我是通过ApplicationContextAware来实现的,把securityManager和realm的装配放到 setApplicationContext里面
@Configuration
public class ShiroConfig implements ApplicationContextAware {
 ......
 @Override
 public void setApplicationContext(ApplicationContext applicationContext)
   throws BeansException {
  try {
   //组装realm到securityManager中
   final Realm myRealm = (Realm) applicationContext.getBean("myRealm");
   final DefaultWebSecurityManager sm = (DefaultWebSecurityManager) applicationContext
     .getBean("securityManager");
   sm.setRealm(myRealm);
  } catch (Exception e) {
   throw new Error("Critical system error", e);
  }
 }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值