SpringMVC集成Shiro时启动报错 No bean named 'shiroFilter' is defined

liuzhen12580 2017-12-19 02:42:00
错误信息--------------------------------------------------------------------------------------------------------------------------------------------------
DEBUG 2017-12-19 14:17:34,465 org.springframework.beans.factory.support.DefaultListableBeanFactory: No bean named 'shiroFilter' found in org.springframework.beans.factory.support.DefaultListableBeanFactory@4710ad01: defining beans []; root of factory hierarchy
十二月 19, 2017 2:17:34 下午 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter shiroFilter
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'shiroFilter' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:575)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1114)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:279)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1121)
at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:323)
at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:235)
at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:194)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4950)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5652)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1015)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:991)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1296)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2038)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
web.xml配置信息-------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 配置SpringMVC核心控制器 -->
<servlet>
<servlet-name>Dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<!-- 启动加载一次 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!--为DispatcherServlet建立映射 -->
<servlet-mapping>
<servlet-name>Dispatcher</servlet-name>
<!-- 此处可以可以配置成*.do -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>




<!-- 加载Spring容器配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 设置Spring容器加载所有的配置文件的路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-*.xml</param-value>
</context-param>

<!-- 防止Spring内存溢出监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>

<!-- 解决工程编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


<!-- 错误页 -->
<error-page>
<error-code>405</error-code>
<location>/WEB-INF/405.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/WEB-INF/500.jsp</location>
</error-page>


<!-- 进行shiro的过滤器的配置 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
</web-app>

springMVC.xml中配置-------------------------------------------------------------------------------------------------------------------------
<!-- 以下为shiro需要的配置项 -->

<!-- 配置SecurityManager的管理 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- 配置你需要使用的Realms -->
<property name="realm" ref="memberRealm"/>
</bean>

<!-- 配置shiro过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 表示现在要配置的是一个安全管理器 -->
<property name="securityManager" ref="securityManager"/>
<!-- 出现错误之后的跳转路径的配置 -->
<property name="loginUrl" value="/view/login.jsp"/>
<!-- 认证失败之后的跳转路径页面 -->
<property name="unauthorizedUrl" value="/view/login.jsp"/>
<!-- 登录成功之后的跳转访问路径 -->
<property name="successUrl" value="/view/index.jsp"/>
<!-- shiro里面需要针对于所有的路径进行配置,所有的配置需要通过文本的形式设置 -->
<property name="filterChainDefinitions">
<value>
/*=anon
<!-- /shiroLogin.action=anon
/messages/**=authc
/admin*=authc
/pages/welcome.jsp=authc,perms[member:add],perms[dept:add] -->
</value>
</property>
</bean>

<!-- 配置Shiro在Spring中的生命周期的控制操作 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
项目结构-----------------------------------------------------------------------------------------------------------------------------------------------------------

还望大神们不吝赐教,谢谢!在线等回应。
...全文
2781 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29031443 2018-10-12
  • 打赏
  • 举报
回复
不好意思,说错了,web.xml只要修改一处就可以。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,
classpath:spring-shiro.xml</param-value>
</context-param>
上下文初始化参数没有加载到你的shiro 配置文件,你把你的shiro配置文件配置在这里面就可以好了。
<servlet> 里面的classpath:spring-shiro.xml 不用加这个。加了这个容易混淆。
qq_29031443 2018-10-12
  • 打赏
  • 举报
回复
这个问题很简答。这是你的上下文初始化参数没有加载到你的shiro 配置文件。在web.xml 位置修改两个地方就可以了。真的是佩服很多网友,只知道错误是什么,并不知道是哪里错,又该怎么改,坑死个人。 修改在web.xml。我的shiro 配置文件 叫spring-shiro.xml,spring 的配置文件叫dispatcher-servlet.xml。我的配置都是放在resource 下面的。所以指向文件的时候用classpath


<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,
classpath:spring-shiro.xml</param-value>
</context-param>

<servlet>
<servlet-name>Dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatcher-servlet.xml,
classpath:spring-shiro.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>


liuzhen12580 2018-05-17
  • 打赏
  • 举报
回复
引用 4 楼 baidu_24598621 的回复:
我也是这个问题
问题已解决,spring配置文件位置的问题,应放到src目录下
Marco-M 2017-12-21
  • 打赏
  • 举报
回复
我也是这个问题
  • 打赏
  • 举报
回复
spring容器实例化shiroFilter的时候,出错了。无法实例化shiroFilter对象,导致这个异常。 建议你查看下org.apache.shiro.spring.web.ShiroFilterFactoryBean这个类。
  • 打赏
  • 举报
回复
没看到你这个类的代码,我只能从异常提示,给你一定的说明
liuzhen12580 2017-12-20
  • 打赏
  • 举报
回复
可以具体一点吗?谢谢,

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧