java - org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named 'authenticationManager' is defined

标签 java spring jsf spring-security

我将 Spring Security 与 JSF 结合使用。

我的 web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>PrimeFaces Web Application</display-name>
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <!-- Spring Context Configuration' s Path definition -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
         </param-value>
    </context-param>


    <!-- welcome file -->
    <welcome-file-list>
        <!-- <welcome-file>faces/index2.xhtml</welcome-file> -->
        <welcome-file>index2.xhtml</welcome-file>
    </welcome-file-list>
    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>bootstrap</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>



    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <context-param>
        <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
        <param-value>resources.application</param-value>
    </context-param>
    <listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
    </listener>

    <!-- The Bootstrap listener to start up and shut down Spring's root WebApplicationContext. 
        It is registered to Servlet Container -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
</web-app>

我的 spring-security.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

xmlns:sec="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
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-3.1.xsd">
<sec:http auto-config="true" use-expressions="true">
    <sec:intercept-url pattern="/home2" access="hasRole('ROLE_USER')" />

    <sec:intercept-url pattern="/**" access="permitAll"/>
    <sec:form-login login-page="/index2.xhtml"/>
</sec:http>

<sec:authentication-manager alias="authenticationManager">                             
    <sec:authentication-provider>
        <sec:user-service>
            <sec:user authorities="ROLE_USER" name="admin" password="admin" />
        </sec:user-service>
    </sec:authentication-provider>
</sec:authentication-manager>

我的ApplicationContext.xml 文件:

<bean id="viewmb" class="com.infpaymoney.managedbeans.ViewManagedBean" scope="prototype">
    <property name="authenticationManager" ref="authenticationManager"></property>
</bean>

还有我的托管 bean:

@Component
@ManagedBean(name = "viewmb")
@RequestScoped
public class ViewManagedBean implements Serializable {
......
@ManagedProperty(value="#{authenticationManager}")
private AuthenticationManager authenticationManager = null;
public AuthenticationManager getAuthenticationManager() {
    return authenticationManager;
}

public void setAuthenticationManager(AuthenticationManager authenticationManager) {
    this.authenticationManager = authenticationManager;
}
.....

但是当我运行我的应用程序位置时,出现以下错误

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewmb' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'authenticationManager' while setting bean property 'authenticationManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'authenticationManager' is defined
at ......
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'authenticationManager' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:553)
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:193)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
... 50 more

authenticationManager 在 spring-security 文件中定义良好,我不知道为什么在 applicationContext.xml 文件中不可见

最佳答案

spring-security.xml 文件添加到 context-param 中或将其导入应用程序上下文中。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml,
        /WEB-INF/spring-security.xml
     </param-value>
</context-param>

关于java - org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named 'authenticationManager' is defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183309/

相关文章:

AngularJS 表达式在带有 JSF 的 ng-src 中无法正常工作

Spring @Async 注解

java - Spring中设置并使用ehcache后缓存为空

java - 在 Java 中将 UTF8 转换为 ASCII

java - 如何使用自定义属性初始化 SparkContext?

javascript - 使用 Angular 的 $http 通过 GET 请求将对象数组发送到 Java Spring

java - 如何将变量的值从jsf的bean页面(即bean.java)移动到另一个java类?

JSF只读inputText问题

java - Akka 循环赛池

java - OrientDB 'engine ' 远程“未找到”