我使用Glassfish JDBC领域来验证用户,因此身份验证过程由其容器管理。我需要使用用户名/电子邮件地址作为用户名。 userid和email地址在postgres用户表中都有不同的列,我正在使用JPA。简而言之,用户可以通过其用户ID或电子邮件登录。
我已经以编程方式编写了登录和注销方法。 login只有两个参数
request.login(username, password);
在google上搜索后,我怀疑我必须以某种方式使用我不知道的用户提供商。
任何建议/提示/想法都会很明显。
答案 0 :(得分:1)
您可以采取多种方法:
如果您对用户名不感兴趣,只是对用户进行了正确身份验证,则可以使用数据库视图将用户ID和电子邮件联合到一列:
创建视图vUsers AS
SELECT userid,来自userid IS NOT NULL的用户的密码
UNION ALL
选择电子邮件,密码来自电子邮件不是空的用户
(注意这种语法不起作用)
您现在可以将JDBC配置重定向到该视图。
这可能不是你想去的方式。在大多数情况下,在身份验证之后,会根据登录名做出一些决定。现在可以是电子邮件或用户ID。同一个人的唯一登录名更好。
在通过HttpServletRequest#login
登录前处理用户名:
由于用户标识和电子邮件通常具有不同的格式,因此您可以决定用户在登录表单中提供的格式。
HttpServletRequest#login
方法。 HttpServletRequest#login
。 这样。你不能再使用glassfish表单登录了,但你总是以userid作为登录名。
请参阅https://docs.oracle.com/cd/E19798-01/821-1841/gircj/index.html
编写自己的登录模块:
您可以编写自己的JAAS登录模块。那里有几个教程。
然而,这基本上归结为区分电子邮件和用户ID,因此方法2应该足够了。