idea+springmvc加载配置异常问题 [NoSuchBeanDefinitionException] No bean named 'shiroFilter' is defined

本文解决Spring集成Shiro框架时出现的NoSuchBeanDefinitionException异常,详细分析问题原因及提供解决方案,涉及配置文件加载顺序及资源目录标记。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章是转载的,来源https://blog.youkuaiyun.com/lgc592519828/article/details/88582695

spring 集成 shiro框架时,报出这个异常
这类异常NoSuchBeanDefinitionException,配置文件中bean加载异常。

严重: 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:529)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1097)
at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:326)
at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:236)
at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:194)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

web.xml

  <!-- shiro 安全过滤器 -->
  <filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <async-supported>true</async-supported>
    <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>
  </filter-mapping>

applicationContext-shiro.xml

<!-- Shiro的Web过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
	<!-- Shiro的安全管理器,所有关于安全的操作都会经过SecurityManager -->
	<property name="securityManager" ref="securityManager"/>
	<!-- 系统认证提交地址,如果用户退出即session丢失就会访问这个页面 -->
	<property name="loginUrl" value="/login.jsp"/>
	<!-- 登录成功后重定向的地址,不建议配置 -->
	<property name="successUrl" value="/index.do"/>
	<!-- 权限验证失败跳转的页面,需要配合Spring的ExceptionHandler异常处理机制使用 -->
	<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
	<property name="filters">
		<util:map>
			<entry key="authc" value-ref="formAuthenticationFilter"/>
		</util:map>
	</property>
	<!-- 自定义的过滤器链,从上向下执行,一般将`/**`放到最下面 -->
	<property name="filterChainDefinitions">
		<value>
			/static/** = anon
			/lib/** = anon
			/js/** = anon
			/login.jsp = anon
			/login.do = anon
			/generateCaptcha = anon
			/logout = logout
			/index.jsp = user
			/authenticated.jsp = authc
			/** = user
		</value>
	</property>
</bean>

加载配置文件配置

<context-param>
	<param-name>contextConfigLocation</param-name>
    <param-value>classpath*:spring-*.xml</param-value>
</context-param>
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

解决方案:
1、首先查看一下web.xml与shiro配置文件中bean的id是否一致 (xml中没问题)

2、查看web.xml配置文件是否加载shiro的配置文件(spring-shiro-web.xml)(配置加载文件没问题)

3、这种情况下,基本上可以确定启动Web项目加载配置文件时出现问题,加载顺序或者没有加载到项目中,基于IDEA情况:

File > Project Structure > Modules > 找到项目对应模块
Source 视图( 看到右侧树中没有加载resource配置文件目录 )
在左侧项目找到resource目录,点击Resource (Mark as : Resource )
右侧树中就会出现对应路径
点击 Apply + OK 保存
修改前
在这里插入图片描述

修改后

在这里插入图片描述

确定后重新启动就正常了,感谢原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值