Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Security中没有此类定义异常_Java_Spring_Security - Fatal编程技术网

Java Spring Security中没有此类定义异常

Java Spring Security中没有此类定义异常,java,spring,security,Java,Spring,Security,嗨,我试着写一个Spring安全应用程序,但我有一个问题。我得到一个错误: 错误:org.springframework.web.context.ContextLoader-上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.filterChains”的bean时出错:使用键[0]设置bean属性“sourceList”时,无法解析对bean“org.

嗨,我试着写一个Spring安全应用程序,但我有一个问题。我得到一个错误:

错误:org.springframework.web.context.ContextLoader-上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.filterChains”的bean时出错:使用键[0]设置bean属性“sourceList”时,无法解析对bean“org.springframework.security.web.DefaultSecurityFilterChain”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.web.DefaultSecurityFilterChain#0”的bean时出错:使用键[2]设置构造函数参数时无法解析对bean“org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter”的bean时出错:设置bean属性“authenticationManager”时无法解析对bean“org.springframework.security.authentication.ProviderManager”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.authentication.ProviderManager#0”的bean时出错:设置构造函数参数时无法解析对bean“org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0”的bean时出错:FactoryBean在创建对象时引发异常;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.authenticationManager”的bean时出错:使用键[0]设置构造函数参数时,无法解析对bean“org.springframework.security.authentication.dao.DaoAuthenticationProvider”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.authentication.dao.DaoAuthenticationProvider#0”的bean时出错:设置bean属性“userDetailsService”时无法解析对bean“userDetailsService”的引用;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未定义名为“userDetailsService”的bean

我的pom.xml

servlet-context.xml

    <?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <annotation-driven />

    <resources mapping="/resources/**" location="/resources/" />


    <beans:bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <context:component-scan base-package="pl.piotr.ibank" />

    <beans:bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <beans:property name="url"
            value="jdbc:oracle:thin:@localhost:1521:HR" />
        <beans:property name="username" value="HR" />
        <beans:property name="password" value="asdfghj" />
    </beans:bean>

    <beans:bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource">
        </beans:property>
        <beans:property name="annotatedClasses">
            <beans:list>
                <beans:value>pl.piotr.ibank.model.User
                </beans:value>
                <beans:value>pl.piotr.ibank.model.UserRole
                </beans:value>
            </beans:list>
        </beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">
                    org.hibernate.dialect.OracleDialect
                </beans:prop>
                <beans:prop key="hibernate.show_sql">
                    true
                </beans:prop>
            </beans:props>
        </beans:property>
    </beans:bean>

    <beans:bean id="hibernateTransactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="sessionFactory" />
    </beans:bean>

</beans:beans>

pl.piotr.ibank.model.User
pl.piotr.ibank.model.UserRole
org.hibernate.dialen.oraclealent
真的
web.xml

    <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets 
        and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/spring/root-context.xml
        /WEB-INF/spring/security-config.xml
        </param-value>

    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

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

</web-app>

上下文配置位置
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/security-config.xml
org.springframework.web.context.ContextLoaderListener
appServlet
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/appServlet/servlet-context.xml
1.
appServlet
/
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*

我编辑了security-conifg.xml,userDetailService正常,但我有新的错误:

错误:org.springframework.web.context.ContextLoader-上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为“userDaoImpl”的bean时出错:自动关联依赖项的注入失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:无法自动连接字段:org.hibernate.SessionFactory pl.piotr.ibank.dao.UserDaoImpl.SessionFactory;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项类型为[org.hibernate.SessionFactory]的匹配bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}


这里发生的事情是,当应用程序启动时,它将首先加载以下内容

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/spring/root-context.xml,
    /WEB-INF/spring/security-config.xml
    </param-value>
</context-param>
来解决这个问题

编辑

你正在经历一场bean依赖的噩梦。按如下方式组织依赖项

创建一个新的
db config.xml
,并具有以下内容

<context:component-scan base-package="pl.piotr.ibank.dao" />

<beans:bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <beans:property name="url"
        value="jdbc:oracle:thin:@localhost:1521:HR" />
    <beans:property name="username" value="HR" />
    <beans:property name="password" value="asdfghj" />
</beans:bean>

<beans:bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource">
    </beans:property>
    <beans:property name="annotatedClasses">
        <beans:list>
            <beans:value>pl.piotr.ibank.model.User
            </beans:value>
            <beans:value>pl.piotr.ibank.model.UserRole
            </beans:value>
        </beans:list>
    </beans:property>
    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">
                org.hibernate.dialect.OracleDialect
            </beans:prop>
            <beans:prop key="hibernate.show_sql">
                true
            </beans:prop>
        </beans:props>
    </beans:property>
</beans:bean>

<beans:bean id="hibernateTransactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>
并具有以下
web.xml
config

    <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets 
        and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/spring/root-context.xml
        </param-value>

    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

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

</web-app>

上下文配置位置
/WEB-INF/spring/root-context.xml
org.springframework.web.context.ContextLoaderListener
appServlet
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/appServlet/servlet-context.xml
1.
appServlet
/
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*

这应该可以解决问题。

security config.xml
文件中添加这一行:

<beans:import resource="servlet-context.xml" />


数据源的所有SpringBean配置都被注释掉,inc。组件扫描包中的bean。编辑,错误粘贴。这个配置在我的应用程序中没有被注释。@blackpanther实际上并不是因为StackOverflow的突出显示而被混淆。
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/spring/root-context.xml,
    /WEB-INF/spring/security-config.xml
    </param-value>
</context-param>
<context:component-scan base-package="pl.piotr.ibank" />
<context:component-scan base-package="pl.piotr.ibank.dao" />

<beans:bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <beans:property name="url"
        value="jdbc:oracle:thin:@localhost:1521:HR" />
    <beans:property name="username" value="HR" />
    <beans:property name="password" value="asdfghj" />
</beans:bean>

<beans:bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource">
    </beans:property>
    <beans:property name="annotatedClasses">
        <beans:list>
            <beans:value>pl.piotr.ibank.model.User
            </beans:value>
            <beans:value>pl.piotr.ibank.model.UserRole
            </beans:value>
        </beans:list>
    </beans:property>
    <beans:property name="hibernateProperties">
        <beans:props>
            <beans:prop key="hibernate.dialect">
                org.hibernate.dialect.OracleDialect
            </beans:prop>
            <beans:prop key="hibernate.show_sql">
                true
            </beans:prop>
        </beans:props>
    </beans:property>
</beans:bean>

<beans:bean id="hibernateTransactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>
<import resource="classpath:/WEB-INF/spring/db-config.xml"/>
<import resource="classpath:/WEB-INF/spring/security-config.xml"/>
    <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets 
        and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/spring/root-context.xml
        </param-value>

    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

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

</web-app>
<beans:import resource="servlet-context.xml" />