J'exécute NTLM à l'aide de Spring Security, j'obtiens l'erreur suivante
org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean nommé 'springSecurityFilterChain' n'est défini
Comment puis-je résoudre cette erreur?
J'ai les éléments suivants définis dans 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>
Mise à jour 1
J'ai résolu cette erreur, maintenant je reçois
org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean nommé 'filterSecurityInterceptor' n'est défini
et j'ai ce qui suit
<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>`
J'ai changé mon applicationContext.xml comme suit parce que, comme @Sean Patrick Floyd a mentionné certains éléments étaient vieux et morts et enterrés. Cependant, j'ai maintenant d'autres erreurs qui doivent être corrigées :-)
Merci
<?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>
À partir des documents DelegatingFilterProxy
:
Notez que le filtre est en fait un DelegatingFilterProxy, et non la classe qui implémentera réellement la logique du filtre. La fonction DelegatingFilterProxy consiste à déléguer les méthodes du filtre à un bean obtenu à partir du contexte de l'application Spring . Cela permet au bean de bénéficier de la prise en charge du cycle de vie du contexte de l'application Web Spring et de la flexibilité de configuration. Le bean doit implémenter javax.servlet.Filter et il doit avoir le même nom que celui de l'élément filter-name . Lisez le Javadoc pour DelegatingFilterProxy pour plus d'informations
Vous devez définir un bean nommé springSecurityFilterChain
qui implémente javax.servlet.Filter
Dans votre contexte d'application.
De Prise en main de la configuration de l'espace de noms de sécurité :
Si vous connaissez les versions pré-espace de noms du framework, vous pouvez probablement déjà deviner à peu près ce qui se passe ici. L'élément
<http>
Est responsable de la création d'unFilterChainProxy
et des beans de filtrage qu'il utilise . Les problèmes courants comme le mauvais ordre des filtres ne sont plus un problème car les positions des filtres sont prédéfinies.
Il vous faut donc au moins ne configuration minimale <http>
Sean Patrick Floyd a absolument raison, mais je pense qu'il vaut la peine de mentionner une solution, qui m'a pris beaucoup de temps.
Vous ajoutez simplement l'annotation @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>
Dans la configuration Java, vous pouvez utiliser les annotations suivantes:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
}
Cela importera le org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration
classe de configuration qui définit le bean springSecurityFilterChain
.
Veuillez fournir un fichier de sécurité de printemps avec une configuration minimale
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/securityhttp: // www .springframework.org/schema/security/spring-security-3.0.3.xsd ">
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_USER" />
</http>