Odwołanie do konfiguracji Spring Security w Spring 3.1 Java Config
Niedawno przełączyłem większość mojej konfiguracji Springa na użycie konfiguracji opartej na kodzie wiosną 3.1. Jednak teraz, po zmianie, moje Spring Security nie działa poprawnie i generuje następujący błąd podczas uruchamiania Tomcat:
<code>SEVERE: Exception starting filter springSecurityFilterChain org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined </code>
Nadal mam Spring Security w pliku XML i wiem, że nie można go przekonwertować na konfigurację Java na wiosnę, ponieważ jest to niestandardowa przestrzeń nazw, jednak odwołuję się do niej w moim pliku konfiguracyjnym Java. Próbowałem również przenieść odwołanie konfiguracji applicationContext-security.xml z konfiguracji Java do mojego pliku web.xml bez żadnego szczęścia.
<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>