我通过扩展AbstractUserDetailsAuthenticationProvider
来创建自定义身份验证提供程序,该UserDetailsService
针对数据库对用户进行身份验证并执行其他授权检查。
我面临的烦恼是身份验证提供商要求我连接UserDetailsService
。至少对于这个项目,我不需要UserDetailsService
,因为如果我有身份验证提供程序来提取用户信息来执行身份验证/授权,我认为没有必要让UserDetails
到拉取相同的用户信息以构造UserDetailsService
对象。
所以,现在,我必须将一个虚拟UserDetailsService
连接到我的身份验证提供程序中,它绝对没有。
是否可以在没有{{1}}的情况下创建身份验证提供程序?
答案 0 :(得分:3)
查看AbstractUserDetailsAuthenticationProvider的代码(至少对于3.0.5版本),它不需要连接UserDetailsService。仔细检查XML配置以确保未使用DAOAuthenticationProvider。
你应该有这样一个块
<authentication-manager>
<authentication-provider ref="yourAuthenticationProvider" />
</authentication-manager>
此外,记录您正在查看的异常,以确切地看到它被抛出的位置。
答案 1 :(得分:0)
Spring使用的默认身份验证提供程序为DaoAuthenticationProvider
(扩展AbstractUserDetailsAuthenticationProvider
并在doAfterPropertiesSet()
中添加一些自己的检查。
因此,实现确实需要UserDetailsService
,但您可以随时通过扩展AbstractUserDetailsAuthenticationProvider
来提供您自己的提供程序实现。