springboot整合shiro报 BeanCreationException: Error creating bean with name 'shiroFilter' - Go语言中文社区

springboot整合shiro报 BeanCreationException: Error creating bean with name 'shiroFilter'


springboot 2.0.4 

然后shiro的版本是

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.0</version>
</dependency>

可是项目启动报错

 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource [com/juzi/shiro/ShiroConfig.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.apache.shiro.spring.web.ShiroFilterFactoryBean] from ClassLoader [sun.misc.Launcher$AppClassLoader@14dad5dc]

怎么就不能将 ShiroFilterFactoryBean 注册呢?怎么同一个类中的 securityManager 和userRealm可以注册成功?ShiroFilterFactoyrBean注册需要securityManager,但是我们已经注入成功了,不应该失败也!怎么说我们需要的材料都有了。

查询了下资料。其实ShiroFilterFactoryBean是一个filter来的,注册一个filter,以前的方法则是在web.xml中,最后交给tomcat来根据这个web.xml文件来,按照监听器》过滤器》拦截器的顺序来加载。现在需要我们springtboot用的方式变了,是下面这样的

用注册@Configuration,然后在对应的创建ShiroFilterFactoryBean的方法上@Bean即可,我们这里都准备齐全了。为何还报错?

然后继续往上找线索,往上就是找tomcat了,楼主试着用 

-XX:+TraceClassLoading

瞎试着去打印点东西来看看,是不是没加载tomcat呢?果然被我发现

Caused by: java.lang.NoClassDefFoundError: javax/servlet/Filter
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_45]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:760) ~[na:1.8.0_45]

最后直接百度一下为什么找不到这个Class,最后的解决方法是

  <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<!--<scope>provided</scope>-->//把这一句注释掉就行了
	</dependency>

将<scope>provided</scope> 这一行注释掉,用回默认的compile即可。至于原因嘛,自己复习一下

Maven中dependency(依赖)的scope(作用域)

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/kobedir/article/details/89012362
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-25 01:03:31
  • 阅读 ( 1774 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢