Java 未找到Bean spring saml

Java 未找到Bean spring saml,java,spring,maven,spring-security,spring-saml,Java,Spring,Maven,Spring Security,Spring Saml,我的SpringSAML1.0.2版本的spring配置有问题。这就是错误: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myBean' defined in file [C:\mypath\myBean.class]: Unsatisfied dependency expressed through constructor argument wi

我的SpringSAML1.0.2版本的spring配置有问题。这就是错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myBean' defined in file [C:\mypath\myBean.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.util.Map]: : Cannot find class [org.springframework.security.saml.metadata.MetadataGeneratorFilter] for bean with name 'metadataGeneratorFilter' defined in ServletContext resource [/WEB-INF/config/samlSecurityContext.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.security.saml.metadata.MetadataGeneratorFilter; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.security.saml.metadata.MetadataGeneratorFilter] for bean with name 'metadataGeneratorFilter' defined in ServletContext resource [/WEB-INF/config/samlSecurityContext.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.security.saml.metadata.MetadataGeneratorFilter
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:738) ~[spring-beans-3.2.6.RELEASE.jar:3.2.6.RELEASE]
...
就我所见,我找不到bean MetadataGeneratorFilter,它是这样定义的:

application.context.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="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">

<context:annotation-config/>
<context:component-scan base-package="smc.services.*;smc.repositories.*"/>

<import resource="samlSecurityContext.xml"/>
...
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:security="http://www.springframework.org/schema/security"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
          http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">


<!-- Scan for auto-wiring classes in spring saml packages -->
<context:component-scan base-package="org.springframework.security.saml"/>


<!-- Filter automatically generates default SP metadata -->
<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
    <constructor-arg>
        <bean class="org.springframework.security.saml.metadata.MetadataGenerator">
            <property name="extendedMetadata">
                <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    <property name="idpDiscoveryEnabled" value="true"/>
                </bean>
            </property>
        </bean>
    </constructor-arg>
</bean>
...
samlSecurityContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="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">

<context:annotation-config/>
<context:component-scan base-package="smc.services.*;smc.repositories.*"/>

<import resource="samlSecurityContext.xml"/>
...
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:security="http://www.springframework.org/schema/security"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
          http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">


<!-- Scan for auto-wiring classes in spring saml packages -->
<context:component-scan base-package="org.springframework.security.saml"/>


<!-- Filter automatically generates default SP metadata -->
<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
    <constructor-arg>
        <bean class="org.springframework.security.saml.metadata.MetadataGenerator">
            <property name="extendedMetadata">
                <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    <property name="idpDiscoveryEnabled" value="true"/>
                </bean>
            </property>
        </bean>
    </constructor-arg>
</bean>
...
我从示例项目中获取了这个示例,但我不确定是否与我的Spring版本兼容。这是我的pom.xml:

    <spring.version>3.2.6.RELEASE</spring.version>
    <spring.security.version>3.2.0.RELEASE</spring.security.version>
    ...
    <dependency>
        <groupId>org.springframework.security.extensions</groupId>
        <artifactId>spring-security-saml2-core</artifactId>
        <version>1.0.2.RELEASE</version>
    </dependency>

我的IDE说在这个包中没有定义引用org.springframework.security.saml的bean。。。所以我很确定这个问题与我这边的一些spring配置有关,但是,对不起,我无法找出哪个是错误的。有线索吗?提前感谢

问题是因为我在pom中添加了依赖项,但我没有在类路径中添加jar。我修复了在我的lib文件夹中添加jar,并在pom中将作用域设置为system的问题,如下所示:

<dependency>
    <groupId>org.springframework.security.extensions</groupId>
    <artifactId>spring-security-saml2-core</artifactId>
    <version>1.0.2.RELEASE</version>
    <scope>system</scope>
    <systemPath>${smc.lib.path}/spring-security-saml2-core-1.0.2.RELEASE.jar</systemPath>
</dependency>

谢谢你

拇指规则:检查bean创建错误中的最后一部分。这是java.lang.ClassNotFoundException:org.springframework.security.saml.metadata.MetadataGeneratorFilter;那么类MetadataGeneratorFilter在类路径中吗?也许是一种依赖,这就是问题所在。谢谢