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

springboot 2.0.4 

然后shiro的版本是


    org.apache.shiro
    shiro-spring
    1.4.0

可是项目启动报错

 

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,最后的解决方法是

  
		org.springframework.boot
		spring-boot-starter-tomcat
		//把这一句注释掉就行了
	

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

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

你可能感兴趣的:(Java后端)