如何让自定义Spring 2身份验证提供程序接受UsernamePasswordAuthenticationToken?

时间:2013-04-15 23:05:36

标签: authentication spring2.x

在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检查下一个身份验证提供程序。

authenticate(Authentication)方法只能抛出BadCredentialsExceptionAuthenticationServiceException,据我所知,这不应该导致上面的输出。

关于Spring 2的信息有点难以找到,目前Spring 3无处不在。

如何让我的提供商接受UsernamePasswordAuthenticationToken

1 个答案:

答案 0 :(得分: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. 调试身份验证并支持方法,看看问题是什么