Spring Security 3.x:在没有UserDetailsS​​ervice的情况下创建自定义身份验证提供程序

时间:2011-02-02 20:56:47

标签: java spring-security

我通过扩展AbstractUserDetailsAuthenticationProvider来创建自定义身份验证提供程序,该UserDetailsService针对数据库对用户进行身份验证并执行其他授权检查。

我面临的烦恼是身份验证提供商要求我连接UserDetailsService。至少对于这个项目,我不需要UserDetailsService,因为如果我有身份验证提供程序来提取用户信息来执行身份验证/授权,我认为没有必要让UserDetails到拉取相同的用户信息以构造UserDetailsService对象。

所以,现在,我必须将一个虚拟UserDetailsService连接到我的身份验证提供程序中,它绝对没有。

是否可以在没有{{1}}的情况下创建身份验证提供程序?

2 个答案:

答案 0 :(得分:3)

查看AbstractUserDetailsAuthenticationProvider的代码(至少对于3.0.5版本),它不需要连接UserDetailsS​​ervice。仔细检查XML配置以确保未使用DAOAuthenticationProvider。

你应该有这样一个块

<authentication-manager>
    <authentication-provider ref="yourAuthenticationProvider" />
</authentication-manager>

此外,记录您正在查看的异常,以确切地看到它被抛出的位置。

答案 1 :(得分:0)

Spring使用的默认身份验证提供程序为DaoAuthenticationProvider(扩展AbstractUserDetailsAuthenticationProvider并在doAfterPropertiesSet()中添加一些自己的检查。

因此,实现确实需要UserDetailsService,但您可以随时通过扩展AbstractUserDetailsAuthenticationProvider来提供您自己的提供程序实现。