springboot+shiro+mybatis整合发现部分功能事务没有被spring管理

springboot+shiro+mybatis整合发现部分功能事务没有被spring管理

最近写一个后台管理的开源项目,发现报错事务没有回滚,折磨了我两天发现其他功能事务都是好用的,只有关于用户的那部分事务没有被spring管理,最后发现在shiro在启动配置的时候Spring还没启动,因为是Shiro先启动的。

在百度了好久也没解决办法,好多都说直接用dao调用,还有提高spring启动的优先级,这些都试过,没用!!然后Google发现一个靠谱的解决办法。

解决办法:

/**
 * 声明SecurityManager
 * @return
 */
@Bean(name="securityManager")
public SecurityManager securityManager() {
    DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
    //manager.setRealm(authorityRealm);
    manager.setCacheManager(new MemoryConstrainedCacheManager());
    return manager;
}
在shiro启动的时候不设置自己的realm,然后在spring启动完成后再设置自己的realm。

所以需要写一个监听器,在spring初始化完成后设置自己的realm就可以了

@Component
public class SpringEventListener {
    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent event) {
        ApplicationContext context = event.getApplicationContext();
        DefaultWebSecurityManager manager = (DefaultWebSecurityManager) context.getBean("securityManager");
        AuthorizingRealm realm = (AuthorizingRealm) context.getBean("authorityRealm");
        realm.setCredentialsMatcher(new CustomCredentialsMatcher());
        manager.setRealm(realm);
    }
}




解决办法,需要翻墙可以访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值