我几天来一直在反对这个问题,在网上看到几十个例子之后我就没有接近解决方案了。
我最终需要进行各种类型的登录。现在,我愿意接受一个。我想使用用户名和密码以外的字段登录。假设我想使用姓名,姓氏和生日。
我认为最简单的方法是实现我自己的UserDetailsService并将其插入我的提供程序。但UserDetailsService只有一个方法loadByUsername,这似乎不是加载我的用户最直观的方法。
那么我认为最好是实现我自己的AuthenticationProvider ...或者只是扩展DaoAuthenticationProvider,并覆盖authenticate()方法。但是该方法将身份验证作为参数...我可以使用POJO,只使用名称,姓氏和生日值字段作为身份验证对象吗?
同样适用于身份验证管理器。事实上,在AbstractUserDetailsAuthenticationProvider的api(authenticate()方法所在的api)中,它表示“使用与AuthenticationManager.authenticate(Authentication)相同的合同执行身份验证”
但人们似乎比经理人更多地实施供应商。奇怪的是,“自定义”提供程序和UserDetailsServices的大多数示例都使用用户名和密码实现身份验证,无论如何,Spring Security默认执行此操作!
任何人都可以对这个问题有所了解吗?正如我所说,有很多例子,但它们都非常相似,我找不到使用非用户名/密码的身份验证对象。
如果有人也可以告诉我拥有多个提供商/经理的最佳方式 - 例如,一个如上所述,另一个使用姓名和社会保险号进行身份验证,例如 - - 并且使用一个或另一个(不是两个,而不是第二个,如果第一个失败!),例如,取决于来自URL的参数传递。
答案 0 :(得分:0)
我不确定你是否已经解决了这个挑战。但是,似乎我和你有类似的情况。我的登录页面需要额外的字段'组织'除了用户名'和密码'。这是我做的: