shiro框架,自定义realm注入service失败解决办法

shiro框架,自定义realm注入service失败解决办法
在这里插入图片描述
报错如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘shiroFilter’ defined in ServletContext resource [/WEB-INF/config/spring-shrio.xml]: Cannot resolve reference to bean ‘securityManager’ while setting bean property ‘securityManager’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘securityManager’ defined in ServletContext resource [/WEB-INF/config/spring-shrio.xml]: Cannot resolve reference to bean ‘databaseRealm’ while setting bean property ‘realm’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘databaseRealm’: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.blog.service.ILoginService com.blog.realm.DatabaseRealm.loginSerivce; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.blog.service.ILoginService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

这么多大概就是一句话:自动注入失败

问题分析: 查阅网络上大量的问题分析,得到结论shiro 自定义realm的认证阶段属于filter,当时的spring bean还没有读取进来。

解决方案:换一种方式进行注入
写一个工具类

@Component
public class ApplicationContextUtils implements ApplicationContextAware {@Autowiredprivate static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.context=applicationContext;}public static Object getBean(String name){return context.getBean(name);}}

需要使用的地方调用方法

@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {System.out.println("-----------------------------");String principal = (String) token.getPrincipal();Object userServiceImpl = ApplicationContextUtils.getBean("userServiceImpl");System.out.println("aaaaaaaaaaaaaaa"+userServiceImpl);if("xiaochen".equals(principal)){return new SimpleAuthenticationInfo(principal,"123",this.getName());}return null;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL建立多选一列表_如何实现自定义列表的多个item,的单选或多选

展开全部自定义ListView item中包含一个e69da5e6ba903231313335323631343130323136353331333337376333textview 和checkbox,checkbox选中级别高于item,故在xml中进行屏蔽单选方法:(该方法同样适用于radiobutton)main.xmlandroid:layout_width"match_parent"android:l…

spring的bean不能注入的几种原因及分析

1、异常信息 2.有可能引起的原因: 1、在applicationContext.xml的配置文件里的包扫描不对。 2、在web.xml里没有加载spring容器。 3、分布式工程,使用dubbo或者hsf通信,在服务层,或者消费层,单词写错了。 4、还有一种可能&am…

linux 备份mysql并上传_Linux 网站目录和MySQL备份并上传FTP

#!/bin/bashMYSQL_USERrootMYSQL_PASSFTP_USERFTP_PASSFTP_IPFTP_backupbackupWEB_DATA/home/wwwrootDataBakNameData_$(date ”%Y%m%d”).tar.gzWebBakNameWeb_$(date ”%Y%m%d”).tar.gzOldDataData_$(date -d -3day ”%Y%m%d”).tar.gzOldWebWeb_$(date -d -3day ”%Y%m%d”…

python后端需要什么基础_【后端开发】python爬虫需要什么基础

入手爬虫确实不要求你精通Python编程,但基础知识还是不能忽视的,那么我们需要哪些Python基础呢?首先我们先来看看一个最简单的爬虫流程:第一步要确定爬取页面的链接,由于我们通常爬取的内容不止一页,所以要…

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyR

异常信息: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2 at org.mybatis.spring.MyBatisExceptionTransl…

java 两个字段排序_如何在Java中按两个字段排序?

使用Java 8流方法.。//Creates and sorts a stream (does not sort the original list)persons.stream().sorted(Comparator.comparing(Person::getName).thenComparing(Person::getAge));Java 8 Lambda方法.。//Sorts the original list Lambda stylepersons.sort((p1, p2) -&…

spring的动态代理,碰到了一个类型转换的问题:java.lang.ClassCastException: com.sun.proxy.$Proxy16 cannot be cast to com.

spring的动态代理,碰到了一个类型转换的问题: java.lang.ClassCastException: com.sun.proxy.$Proxy16 cannot be cast to com.Charon.service.UserServiceImpl 首先介绍一下spring的动态代理。 spring使用的动态代理有两种:JDK Proxy 和CGL…

java xms512m_安装版的tomcat设置JAVA_OPTS=-Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M...

tomcat如果是通过windows服务启动,执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\JavaOptions原值为-Dcatalina.homeE:\Tomcat…

关于Typora编辑器编写markdown文档时插入出现前字吞后字的解决方法

关于Typora编辑器编写markdown文档时插入出现前字吞后字的解决方法 原因是按到了键盘上的Insert键,使得编辑模式变为了改写,所以会把文本替换掉,这个按键没有状态标示。

异常信息java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:

在写springboot项目时出现了一个这样的错误!! ava.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43) …

java http url 编码_Java中的HTTP URL地址编码

java.net.URI类可以帮助;在URL的文档中找到Note, the URI class does perform escaping of its component fields in certain circumstances. The recommended way to manage the encoding and decoding of URLs is to use an URI使用带有多个参数的构造函数,如&…

Error querying database. Cause: java.lang.UnsupportedOperationException

mybatis抛出以下异常: Error querying database. Cause: java.lang.UnsupportedOperationException 对应语句如下: select distinct code from ssj_dictionary 错误原因是 resultType“java.util.List” ,这里应该改成: result…

从java多态到策略模式_设计模式中的多态——策略模式详解

2. 策略模式详解2.1 策略模式定义策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户端而独立的变化。可以使用多态进行类比来理解策略模式的定义。一系列算法可以理解成接口的不同实现类,因为不同实现类…

linux服务器安装zookeeper本地项目远程连接

linux服务器安装zookeeper本地项目远程连接 zookeeper linux 服务器安装,本地idea连接 先决条件:一台linux服务器,服务器里面已经安装好java环境(安装Java看这里:https://blog.csdn.net/qq_43842093/article/details…

android 获取蓝牙设备id_【报Bug】安卓平台获取不到蓝牙设备服务列表(ios可以)...

产品分类:uniapp/AppPC开发环境操作系统:WindowsPC开发环境操作系统版本号:win10HBuilderX类型:正式HBuilderX版本号:3.0.7手机系统:Android手机系统版本号:Android 9.0手机厂商:华为…

java gson 工具类_GSON 实体 转换工具类

/*** Gson转换工具类*/public class GsonUtils {/*** param jsonString* json字符串* param cls* 要转换的类* param * 返回要转换的类* return*/public static T getPerson(String jsonString, Class cls) {T t null;try {Gson gson new G…

修改linux远程主机名命令hostname

hostname命令 用这个命令:之后重新登录

java string字符操作_Java对String类型字符串的各种操作姿势

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//获取字符串的长度String str2 "helloword";System.out.println(str2.length());//利用数组创建string对象char[] cha {h,e,l,l,o,w,o,r,d,!};String str new String(cha);System.out.println(str);//利用数组创建st…

zookeeper下载安装过程

1.1 下载安装 1、环境准备 ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。 2、上传 将下载的ZooKeeper放到/opt/ZooKeeper目录下 #上传zookeeper altp put f:/setup/apache-zookeeper-3.5.6-bin.tar.gz #打开 opt目录 cd /opt #创…

java 计算反码_java基础知识-原码、反码、补码、运算符

一、原码、反码、补码原码一个数转化成二进制。用最高位来表示正负,最高位为0表示正数,最高位为1表示负数。例如:short i5;因为在java里short占2个字节转化成二进制就是 00000000 00000101所以 00000000 00000101就是5的原码short…