java - 未定义名为 'shiroFilter' 的 bean

标签 java spring shiro

我目前正在将 Shiro 嵌入到我的 Spring Web 应用程序中。

web.xml中,我添加了:

    <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>
    </filter-mapping>

servlet-context.xml 中,我添加了:

    <beans:bean id="shiroFilter" name="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <beans:property name="securityManager" ref="securityManager"/>
        <beans:property name="filterChainDefinitions">
            <beans:value>
                # some example chain definitions:
                /admin/** = authc, roles[admin]
                /docs/** = authc, perms[document:read]
                /** = authc
                # more URL-to-FilterChain definitions here
            </beans:value>
        </beans:property>
    </beans:bean>

    <beans:bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <beans:property name="realm" ref="myRealm"/>
    </beans:bean>

    <beans:bean id="myRealm" class="com.hersbitcloud.cancercloud.ShiroRealm">

    </beans:bean>

因为我还没有找到 JDBD 领域的解决方案,所以我只是将 AuthenticatingRealm 用作:

public class ShiroRealm extends AuthenticatingRealm {

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {
        // TODO Auto-generated method stub
        return null;
    }
}

但是,我遇到了以下异常:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'shiroFilter' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1175)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1057)
    at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:326)
    at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:235)
    at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:199)
    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:4640)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我该如何解决这个问题?

谢谢。

最佳答案

在 context-param 中添加 servlet-context.xml,如下所示:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml,
    /WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</context-param>

不要将其放在 servlet contextConfigLocation 中

关于java - 未定义名为 'shiroFilter' 的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561925/

相关文章:

java - 如何在 Debug模式下启动 james 服务?

java - 编辑 JSON 字段

java - org.springframework.web.bind.MethodArgumentNotValidException

java - shiro.ini 在 Web 应用程序中应该放在哪里?

java - 使用PowerMock模拟SecurityUtils中Shiro的静态方法

java - Spring Boot - 如何创建不同 JpaRepository 接口(interface)的工厂

java - 如何将jchart转换为csv格式

java - 将 View 代码放在 Controller 中是不好的做法吗?

java - 如何干净地测试使用 DomainClassConverter 检索参数的 Spring Controller ?

jakarta-ee - 子容器在启动期间失败