Referencia a la configuración de Spring Security dentro de Spring 3.1 Java Config
Recientemente cambié la mayoría de mi configuración de Spring para usar la configuración basada en código en Spring 3.1. Sin embargo, ahora que he cambiado, mi Spring Security no funciona correctamente y produce el siguiente error en el inicio de Tomcat:
<code>SEVERE: Exception starting filter springSecurityFilterChain org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined </code>
Todavía tengo Spring Security en un archivo XML, y sé que esto no se puede convertir a Java config en Spring ya que es un espacio de nombres personalizado, sin embargo, estoy haciendo referencia a él dentro de mi archivo de configuración de Java. También intenté mover la referencia de configuración de applicationContext-security.xml de la configuración de Java a mi web.xml sin suerte.
<code>@Configuration @EnableWebMvc @Import(ServicesConfig.class) @ImportResource({ "classpath:applicationContext-security.xml", "classpath:dataSources.xml" }) @ComponentScan(basePackages = "com.foobar") public class WebConfig { // left out Beans for clarity } </code>
applicationContext-security.xml:
<code><b:beans xmlns="http://www.springframework.org/schema/security" xmlns:b="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:oauth2="http://www.springframework.org/schema/security/oauth2" 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 http://www.springframework.org/schema/security/oauth2 http://www.springframework.org/schema/security/spring-security-oauth2.xsd"> <!-- Security configuration --> <global-method-security pre-post-annotations="enabled" /> <http use-expressions="true" access-denied-page="/error/accessDenied" entry-point-ref="casEntryPoint"> <intercept-url pattern="/**" access="isAuthenticated()" /> <custom-filter position="CAS_FILTER" ref="casFilter" /> </http> <authentication-manager alias="authenticationManager"> <authentication-provider ref="casAuthenticationProvider" /> </authentication-manager> <!-- Bean definitions --> <b:bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider" p:serviceProperties-ref="serviceProperties" p:key="1234" p:authenticationUserDetailsService-ref="userDetailsByNameServiceWrapper" p:ticketValidator-ref="cas20ServiceTicketValidator" /> <b:bean id="userDetailsByNameServiceWrapper" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper" c:userDetailsService-ref="userDetailsService" /> <b:bean id="userDetailsService" class="foobar.MyUserDetailsService" /> <b:bean id="cas20ServiceTicketValidator" class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator" c:casServerUrlPrefix="https://mycasserver/cas" /> <b:bean id="casFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter" p:authenticationManager-ref="authenticationManager" /> <b:bean id="casEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint" p:loginUrl="https://mycasserver/cas/login" p:serviceProperties-ref="serviceProperties" /> <b:bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties" p:service="https://foobar.com/services/j_spring_cas_security_check" p:sendRenew="false" /> </b:beans> </code>
web.xml
:
<code><?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <description>My App</description> <!-- Context Params --> <context-param> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>foobar.WebConfig</param-value> </context-param> <!-- Filters --> <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> <!-- Listeners --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Servlets --> <servlet> <servlet-name>dispatcher</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> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> </code>