SpringBoot整合shiro-spring-boot-web-starter启动报错

2023-11-03

最近在做一个SpringBoot整合常用框架的系统,在整合Shiro时启动就报错,现将解决办法总结如下:
SpringBoot使用的是最新的2.3.4版本,Shiro使用的是shiro-spring-boot-web-starter1.6.0版本,在配置文件ShiroConfig中添加安全管理器,代码如下:

@Bean
public SecurityManager securityManager(UserRealm userRealm) {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    //配置realm
    securityManager.setRealm(userRealm);
    return securityManager;
}

项目启动时报错如下:

Description:
The bean 'securityManager', defined in class path resource [org/apache/shiro/spring/config/web/autoconfigure/ShiroWebAutoConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [com/xlhj/shiro/config/ShiroConfig.class] and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

根据异常信息查看ShiroWebAutoConfiguration源码时发现其中已经定义了securityManager,ShiroConfig配置文件中再次定义securityManager,因返回的类与其不一样导致出错,shiro-spring-boot-web-starter包中定义securityManager的代码如下:

@Bean
@ConditionalOnMissingBean
@Override
protected SessionsSecurityManager securityManager(List<Realm> realms) {
    return super.securityManager(realms);
}

从源代码中可以看出securityManager返回的是SessionsSecurityManager,而自己定义的ShiroConfig中返回的是SecurityManager,所以如果要定义securityManager,返回类型只能是SessionsSecurityManager及其子类,而SessionsSecurityManager的子类是DefaultSecurityManager,DefaultWebSecurityManager又继承与DefaultSecurityManager,相关类图如下:
DefaultWebSecurityManager类图
故而正确的代码应该是:

@Bean
public SessionsSecurityManager securityManager(UserRealm userRealm) {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    //配置realm
    securityManager.setRealm(userRealm);
    return securityManager;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot整合shiro-spring-boot-web-starter启动报错 的相关文章

随机推荐

  • 无人机运动场景下移动物体检测和跟踪系统

  • Python+pytest邮件发送测试报告,附件添加测试报告,邮件正文显示测试报告内容

    发送邮件测试报告 这个可以直接复制粘贴代码 都通用 我这个文件里还有其他的代码 导入的包比较多 单说发邮件的话 只导入邮件相关的几个就可以了 coding utf 8 import smtplib import time from emai
  • 真实项目案例实战——【状态设计模式】使用场景

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 写在前面 设计模式源于生活 而又高于生活 什么是状态模式 状态模式允许一个对象在其内部状态改变的时候改变其行为 这个对象看上去就像是改变了它的类一样 状态模式应用场景 1
  • Jetson XAVIAR NX 上安装tensorflow

    目录 JetPack 版本 安装过程 异常处理 1 train 时提示scikit learn 错误 2 tensorflow lite infer 时提示invoke 错误
  • TensorFlow学习(5)数据结构 & 自定义组件(损失函数,激活函数,初始化,正则化和约束,层)

    神经网络架构进一步学习 TensorFlow模型花园 1 数据结构 在使用之前先要导入tensorflow import tensorflow as tf 1 1 张量 1 1 1 通过直接传入创建 使用tf constant 创建张量 p
  • leetcode 5. 最长回文子串(c++)

    题目 思路分析 中心扩向两边的思想 根据回文串的性质 如str aba 从b出发 往两边同时遍历并比较字符是否相同即可 令left i 1 right i 1 那么依次比较str left str right 是否成立 如成立 继续比较 若
  • DASH(QTUM)Java对接

    下载钱包 https github com dashpay dash releases download v0 15 0 0 dashcore 0 15 0 0 win64 setup exe 配置文件 rpcuser rpcpasswor
  • 银行卡交易手续费介绍

    文章目录 转接清算费 转接清算费双向计收 转接清算费单向计收 交换费 转接清算费 银行卡清算机构收取的网络服务费 对于跨境交易的转接清算费是包含跨境交易服务费在内的多项费用合计金额 转接清算费双向计收 每笔交易银联分别向收单机构和发卡机构收
  • springboot整合Druid+mybatis

    Druid Springboot集成Druid方案 一个是在POM中直接配置druid spring boot starter 不用写任何代码 一个是配置druid 写几行代码 可以加入 在方案一基础上加入stat wall后进行验证登录
  • 特征筛选之特征递归消除法及Python实现

    特征递归消除法 特征递归消除法 Feature Recursive Elimination 简称RFE 是一种特征选择的算法 它通过反复训练模型 并剔除其中的弱特征 直到达到所需的特征数量 该算法的步骤如下 首先 将所有的特征都输入模型 得
  • 【总结】【C++11】禁止拷贝新方法与相关知识点

    原理 依据 https isocpp github io CppCoreGuidelines CppCoreGuidelines Rc copy virtual C 67 A polymorphic class should suppres
  • Qt入门-下拉列表框QComboBox类

    QComboBox是QT GUI中的下拉列表框 class Q GUI EXPORT QComboBox public QWidget Q OBJECT 常用方法和属性 1 addItems void addItems const QStr
  • JavaWeb学习-02(response和request)

    JavaWeb学习 02 response和request 一 request对象 1 HttpServletRequest是ServletRequest的子接口 request对象用于接收客户端传递过来的请求内容 通过该对象的各种方法来获
  • weak_ptr 智能指针的使用

    目录 一 weak ptr 变量的定义 二 expired 成员函数 三 lock 成员函数 四 use count 成员函数 五 为什么要用 weak ptr 一 weak ptr 变量的定义 weak ptr 对象的构造有3种方法 1
  • 软件测试面试面对HR提出的问题,怎么回答才不会被面试官“套路”

    面试中 如何回答HR提出的问题很大程度上决定了面试能不能成功 下面是软件测试人员在面试过程中经常被问到的10个问题 告诉你怎么回答才不会被面试官套路 请你做一个自我介绍 误区 一般人回答这个问题过于平常 只说姓名 年龄 爱好 工作经验 这些
  • 深度学习中的优化算法之NAG

    之前在https blog csdn net fengbingchun article details 124648766 介绍过Momentum SGD 这里介绍下深度学习的另一种优化算法NAG NAG Nesterov Accelera
  • 【航模】凤凰模拟器安装

    固定翼飞手3 1 航模入门教程 凤凰模拟器的安装与初始设置 航模模拟器详细教程 到群里下载凤凰模拟器 并按照视频进行安装 群里的文件安装方式相比自己CSDN里面介绍的安装方式更省力 DirectX它能够自己进行安装 自己的天地飞6遥控器是右
  • 八、RSTP

    STP协议虽然能够解决环路问题 但是收敛速度慢 影响了用户通信质量 如果STP网络的拓扑结构频繁变化 网络也会频繁失去连通性 从而导致用户通信频繁中断 IEEE于2001年发布的802 1w标准定义了快速生成树协议RSTP Rapid Sp
  • spring硬骨头-----解决循环依赖问题

    目录 what spring中是如何解决循环依赖问题的 整体思路 spring中初始化时设置属性值的方法 set和构造的区别 那么三级缓存是怎么处理的呢 实现细节 总结 1 三级缓存解决循环依赖问题的关键是什么 为什么提前暴露对象能够解决
  • SpringBoot整合shiro-spring-boot-web-starter启动报错

    最近在做一个SpringBoot整合常用框架的系统 在整合Shiro时启动就报错 现将解决办法总结如下 SpringBoot使用的是最新的2 3 4版本 Shiro使用的是shiro spring boot web starter1 6 0