简体   繁体   中英

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined - Java Based Configuration

Trying to resolve org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined in Java based configuration.

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"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

    <!-- 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>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>com.examples.config.WebAppConfig</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>

    <!-- Spring Security -->
    <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>

    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/views/error/404.jsp</location>
    </error-page>


</web-app>

The WebAppCinfig java based:

@EnableWebMvc
@Configuration
@Import(value = SecurityConfig.class)
@ComponentScan(basePackages = {"com.examples"})
@ImportResource({ "classpath:spring-security-config.xml" })
public class WebAppConfig extends WebMvcConfigurerAdapter {

    public WebAppConfig() {
        super();
    }

    @Override
    public void addViewControllers(final ViewControllerRegistry registry) {
        super.addViewControllers(registry);

        registry.addViewController("/anonymous.html");

        registry.addViewController("/login.html");
        registry.addViewController("/homepage.html");
    }

    @Bean
    public ViewResolver viewResolver() {
        final InternalResourceViewResolver bean = new InternalResourceViewResolver();

        bean.setViewClass(JstlView.class);
        bean.setPrefix("/WEB-INF/views/");
        bean.setSuffix(".jsp");

        return bean;
    }
}

The SecurityConfig.java file for the security:

@Configuration
@ImportResource({ "classpath:spring-security-config.xml" })
public class SecurityConfig {

    public SecurityConfig() {
        super();
    }

}

And finally the WebAppConfig.java class:

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

    <http auto-config="true">
        <intercept-url pattern="/anonymous*" access="isAnonymous()"/>
        <intercept-url pattern="/login*" access="permitAll"/>
        <intercept-url pattern="/**" access="isAuthenticated()"/>

        <form-login login-page='/login.html' login-processing-url="/perform_login"
                    default-target-url="/homepage.html" authentication-failure-url="/login.html?error=true"
                    always-use-default-target="true"/>

        <logout logout-url="/perform_logout" delete-cookies="JSESSIONID"
                success-handler-ref="customLogoutSuccessHandler"/>

    </http>

    <beans:bean name="customLogoutSuccessHandler"
                class="com.examples.config.CustomLogoutSuccessHandler"/>

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="user1" password="pass1" authorities="ROLE_USER"/>
                <user name="user2" password="pass2" authorities="ROLE_USER"/>
            </user-service>
        </authentication-provider>
    </authentication-manager>
</beans:beans>

Now, I am getting org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined in a Java base Spring Security project I am working on. Things works on Annotation Configuration well and is testable in a great way. For some reason, Spring does is throwing such an error while trying to accomplish Spring Security Form Login example.

Also in the spring-security-config.xml tried changing <http use-expressions="true"> to <http auto-config="true"> but still no luck resolving No Bean Named 'springSecurityFilterChain' found exception.

Any help in this matter would be highly appreciated. Thanks,

Spring container is trying to find springSecurityFilterChain bean in application context, not web application context. Change spring security configuration to be included in root context.

Please provide minimal configuration of spring-security

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd ">

<http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM