0

在 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

4

1 回答 1

0

Spring Security 2 的文档也很好:http ://static.springsource.org/spring-security/site/docs/2.0.x/reference/html/springsecurity.html 请使用以下支持方法:

public boolean supports(Class authentication) {
    return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
}

已编辑

建议:

  1. 删除您的提供商 - 身份验证应该可以工作。如果不是 - 解决问题。
  2. 调试身份验证和支持方法,看看是什么问题
于 2013-04-16T05:55:36.883 回答