我有这样的配置:
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/index.jsp" access="isAuthenticated()"/>
<security:http-basic/>
</security:http>
然后,BasicAuthenticationFilter
<bean id="basicAuthenticationFilter"
class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationEntryPoint" ref="BauthenticationEntryPoint"/>
<property name="authenticationManager" ref="BauthenticationManager"/>
</bean>
入口点和经理被这样描述:
<bean id="BauthenticationEntryPoint" class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="Name Of Your Realm"/>
</bean>
<bean id="BauthenticationManager" class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref local="ldapAuthProvider"/>
</list>
</property>
</bean>
最后
<bean id="ldapAuthProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg>
<bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="contextSource"/>
<property name="userDnPatterns">
<list>
<value>sAMAccountName={0}</value>
</list>
</property>
</bean>
</constructor-arg>
<constructor-arg>
<bean
class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
<constructor-arg ref="contextSource"/>
<constructor-arg value=""/>
</bean>
</constructor-arg>
</bean>
当我尝试访问/index.jsp时,我显示了一个stadart http auth窗口,它请求我输入我的用户名和密码。当我将其键入表单并按Enter时,没有任何操作 - 只需重新加载auth窗口即可。
我犯了哪个错误? 感谢。
答案 0 :(得分:0)
独立声明bean并不意味着它们将覆盖命名空间配置中的等效bean。例如,<http-basic />
会将BasicAuthenticationFilter
添加到过滤器链(以及一个入口点),并且您声明自己的实例这一事实将无效。
就目前而言,您的命名空间配置忽略了您声明的过滤器和身份验证bean。您可以尝试使用:
<http use-expressions="true" authentication-manager-ref="BauthenticationManager">
<intercept-url pattern="/index.jsp" access="isAuthenticated()"/>
<http-basic />
</http>
这将使配置使用您的身份验证管理器。或者,您可以使用标准命名空间语法进行身份验证管理器并删除BauthenticationManager
bean:
<authentication-manager>
<authentication-provider ref="ldapAuthProvider" />
</authentication-manager>
无论哪种方式,您都应该阅读参考手册的namespace chapter,以了解它的工作原理。