【发布时间】:2014-06-16 02:31:49
【问题描述】:
我这几天一直在努力解决这个问题,在网上看到了几十个例子之后,我离解决方案更近了。
我最终需要进行各种类型的登录。现在我会满足于一个。我想使用用户名和密码以外的字段登录。假设我想使用姓名、姓氏和生日。
我认为最简单的方法是实现我自己的 UserDetailsService 并将其插入我的提供程序。但是 UserDetailsService 只有一个方法,loadByUsername,这似乎不是最直观的加载我的用户的方法。
然后我认为最好实现我自己的AuthenticationProvider ...或者简单地扩展DaoAuthenticationProvider,并覆盖authenticate()方法。但是该方法将身份验证作为参数...我可以使用 POJO,只有姓名、姓氏和出生日期字段作为身份验证对象吗?
身份验证管理器同上。事实上,在 AbstractUserDetailsAuthenticationProvider 的 api 中(authenticate() 方法所在的地方)它说它“使用与 AuthenticationManager.authenticate(Authentication) 相同的合同执行身份验证”
但人们似乎比管理器更多地实施提供者。奇怪的是,“自定义”提供者和 UserDetailsServices 的大多数示例......都使用用户名和密码实现身份验证,这是 Spring Security 默认情况下所做的!
任何人都可以对这个主题有所了解吗?正如我所说,有很多示例,但它们都非常相似,我找不到使用不是用户名/密码的身份验证对象。
如果有人还可以告诉我拥有多个提供者/经理的最佳方式(例如,如上所述的一个,以及使用姓名和社会保险号进行身份验证的另一个),则奖励积分,例如 - - 并使用一个或另一个(不是两者,如果第一个失败,则不是第二个!)取决于从 url 传递的参数,例如。
【问题讨论】:
标签: authentication spring-security customization