with tutorial loginprocessingurl example ejemplo java spring login spring-security

java - loginprocessingurl - spring security tutorial



Obteniendo el error org.springframework.beans.factory.NoSuchBeanDefinitionException: Ningún bean llamado ''springSecurityFilterChain'' está definido (4)

Estoy ejecutando NTLM utilizando Spring Security, obtengo el siguiente error

org.springframework.beans.factory.NoSuchBeanDefinitionException: Ningún bean llamado ''springSecurityFilterChain'' está definido

¿Cómo puedo resolver este error?

Tengo lo siguiente definido en web.xml

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

Actualización 1

Resolví ese error, ahora estoy recibiendo

org.springframework.beans.factory.NoSuchBeanDefinitionException: Ningún bean llamado ''filterSecurityInterceptor'' está definido

y tengo lo siguiente

<bean id="springSecurityFilterChain" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter, exceptionTranslationFilter, ntlmFilter, filterSecurityInterceptor </value> </property> </bean>`

Cambié mi applicationContext.xml de la siguiente manera porque al igual que @Sean Patrick Floyd mencionó que algunos elementos estaban viejos y muertos y enterrados. Sin embargo, ahora tengo otros errores que deben corregirse :-)

Gracias

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.2.xsd"> <!--<authentication-manager alias="_authenticationManager"></authentication-manager>--> <security:authentication-provider> <security:user-service> <security:user name="testuser" password="PASSWORD" authorities="ROLE_USER, ROLE_ADMIN"/> <security:user name="administrator" password="PASSWORD" authorities="ROLE_USER,ROLE_ADMIN"/> </security:user-service> </security:authentication-provider> <bean id="userDetailsAuthenticationProvider" class="com.icesoft.icefaces.security.UserDetailsAuthenticationProvider"> <security:custom-authentication-provider/> </bean> <bean id="ntlmEntryPoint" class="org.springframework.security.ui.ntlm.NtlmProcessingFilterEntryPoint"> <property name="authenticationFailureUrl" value="/accessDenied.jspx"/> </bean> <bean id="ntlmFilter" class="org.springframework.security.ui.ntlm.NtlmProcessingFilter"> <security:custom-filter position="NTLM_FILTER"/> <property name="stripDomain" value="true"/> <property name="defaultDomain" value="domain"/> <property name="netbiosWINS" value="domain"/> <property name="authenticationManager" ref="_authenticationManager"/> </bean> <bean id="exceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter"> <property name="authenticationEntryPoint" ref="ntlmEntryPoint"/> </bean> <security:http access-decision-manager-ref="accessDecisionManager" entry-point-ref="ntlmEntryPoint"> <security:intercept-url pattern="/accessDenied.jspx" filters="none"/> <security:intercept-url pattern="/**" access="ROLE_USER"/> </security:http> <bean id="accessDecisionManager" class="org.springframework.security.vote.UnanimousBased"> <property name="allowIfAllAbstainDecisions" value="false"/> <property name="decisionVoters"> <list> <bean id="roleVoter" class="org.springframework.security.vote.RoleVoter"/> </list> </property> </bean> </beans>


De los documentos DelegatingFilterProxy :

Tenga en cuenta que el filtro es en realidad un DelegatingFilterProxy, y no la clase que realmente implementará la lógica del filtro. Lo que DelegatingFilterProxy hace es delegar los métodos del filtro a través de un bean que se obtiene del contexto de la aplicación Spring . Esto permite que Bean se beneficie del soporte del ciclo de vida del contexto de la aplicación web Spring y de la flexibilidad de configuración. El bean debe implementar javax.servlet.Filter y debe tener el mismo nombre que en el elemento filter-name . Lea el Javadoc para DelegatingFilterProxy para más información

Necesita definir un bean llamado springSecurityFilterChain que implemente javax.servlet.Filter en el contexto de su aplicación.

Desde el principio con la configuración del espacio de nombres de seguridad :

Si está familiarizado con versiones de espacio de nombres previas al marco, probablemente ya pueda adivinar aproximadamente qué está sucediendo aquí. El elemento <http> es responsable de crear un FilterChainProxy y los beans de filtro que utiliza . Los problemas comunes como el orden incorrecto de filtros ya no son un problema, ya que las posiciones del filtro están predefinidas.

Por lo tanto, necesita al menos una configuración <http> mínima


En la configuración de Java, puede usar las siguientes anotaciones:

@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity public class MySecurityConfig extends WebSecurityConfigurerAdapter { }

Eso importará la clase de configuración org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration que define el bean springSecurityFilterChain .



Sean Patrick Floyd tiene toda la razón, pero creo que vale la pena mencionar una solución, que me tomó mucho tiempo.

Simplemente agrega la anotación @ImportResource.

@Configuration @EnableWebMvc @ComponentScan(basePackages = {"org.company"}) @ImportResource({"classpath:security.xml"}) public class CompanyWebMvcConfiguration extends WebMvcConfigurerAdapter { }

security.xml:

<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <http use-expressions="true"> <access-denied-handler error-page="/error"/> </http>