在 Spring 2 中,我创建了一个自定义身份验证提供程序,因为我无法像 Spring 似乎更喜欢的那样从数据库中获取密码,因为有一个黑匣子。当我尝试进行身份验证时,我得到:
未找到 org.springframework.security.providers.UsernamePasswordAuthenticationToken 的 AuthenticationProvider
我把这个bean放在我的security.xml中:
<bean id="imsAuthProvider" class="com.terrapages.mokbeecds.ims.IMSAuthenticationProvider">
<security:custom-authentication-provider />
</bean>
我相信,这就是我所需要的。它应该只从表单中获取用户名和密码,然后将其传递给我的提供商,以便在它认为合适的时候进行处理。我的 customAuthenticationProvider 中也有这个:
public boolean supports(@SuppressWarnings("rawtypes") Class authentication) {
return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
}
据我了解,在将身份验证令牌提供给自定义身份验证提供程序之前会对其进行检查。如果它返回 false,则 Spring 检查下一个身份验证提供程序。
mainauthenticate(Authentication)
方法只能抛出 aBadCredentialsException
或 an AuthenticationServiceException
,据我了解,这不应该导致上面的输出。
关于 Spring 2 的信息有点难找,目前 Spring 3 无处不在。
如何让我的提供者接受UsernamePasswordAuthenticationToken
?