springboot整合shiro时报错:
ERROR 21620 ---
[ restartedMain] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.BeanCreationException.
Message: Error creating bean with name 'filterShiroFilterRegistrationBean' defined in class path resource
[org/apache/shiro/spring/config/web/autoconfigure/ShiroWebFilterConfiguration.class]:
Bean instantiation via factory method failed;
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.servlet.FilterRegistrationBean]:
Factory method 'filterShiroFilterRegistrationBean' threw exception;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'shiroFilterFactoryBean' available
-----
WARN 21620 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
主要就是这两句话:
Method filterShiroFilterRegistrationBean in org.apache.shiro.spring.config.web.autoconfigure.ShiroWebFilterConfiguration required a bean named ‘shiroFilterFactoryBean’ that could not be found.
Action:
Consider defining a bean named ‘shiroFilterFactoryBean’ in your configuration.
一开始我也想了一会儿,实在感觉也没错啊,不过,按照它说的这个“缺少shiroFilterFactoryBean”,有点纳闷。后面仔细一比较,我发现这个bean是首字母小写的,不是“ShiroFilterFactoryBean”这个类,这样的话就简单了:
只要把在@Bean前面+这个name就可以了。
@Bean(name = "shiroFilterFactoryBean")
public ShiroFilterFactoryBean shiroFilter(@Qualifier("mySecurityManager")
DefaultWebSecurityManager securityManager) {
还有一种办法就是在写方法名的时候命名为:getShiroFilterFactoryBean,这样的话也可以运行的。
总结:
这次,我只能说就是我的基础不好。哎,以前学Spring的时候,花了不少时间,但是效果很不理想,主要是学的时候操作太少了。比较懒,<bean>
标签等等,我没有弄明白原理,或者说后面又忘记了,当时的笔记也没有做好(这里我得说,做笔记、如何做笔记真的是很重要),当时我就看到视频里的老师有笔记,就没想自己写笔记了,现在看来后悔了!还有,编程做笔记尽量用typora,毕竟这个看起来确实是最舒服的了!