[NoSuchBeanDefinitionException] No bean named 'shiroFilter' is defined

9 篇文章 0 订阅
4 篇文章 0 订阅

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>

spring-shiro-web.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 保存
修改前

在这里插入图片描述

修改后

在这里插入图片描述

OK,启动项目,问题解决。


有问题欢迎各位提出,一起进步!!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值