我在网站上使用 Servlet3 登录来验证用户我有这些登录
- 网站正常登录(填写注册表格)
- Facebook 登录(来自 Facebook Id)
- Twitter 登录(来自 Twitter)
我已经通过以下代码对用户进行了身份验证
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
request.login(username, password);
网站登录工作正常,因为用户提供了他/她的 EMailId 和密码并将其存储在数据库中。
现在我修改了表并添加了更多列以将 Facebookid 保存在同一个用户表中,并将 Facebook 登录密码 FacebookId 也用作密码。我会为 Twitter 做同样的事情,但我想要相同的 Servlet3 来验证用户。我怎样才能实现它?
并且还在 META-INF
文件夹中添加了 context.xml
文件
<Realm localDataSource="true" debug="99"
className="org.apache.catalina.realm.JDBCRealm" connectionName="user"
connectionPassword="password" connectionURL="jdbc:mysql://localhost:3306/ ccc"
digest="md5" driverName="com.mysql.jdbc.Driver" roleNameCol="role_name"
userCredCol="password" userNameCol="email_id"
userRoleTable="users_list" userTable="user_list_view" />
还可以检查领域条目触发的查询吗?
最佳答案
首先,您不应该将各种身份验证因素混为一谈
您想要实现的目标在普通领域配置中是不可能的。你想要的是 Combined Realm在tomcat中可用。
CombinedRealm
让您可以灵活地将多个数据源配置为身份验证源。
鉴于这种灵 active ,您应该能够拥有单独的表 facebook_auth
和 twitter_auth
等等。为可能越来越多的身份验证源向同一个表添加更多列是不可持续的。
关于java - 创建通用 Serverlet3 登录的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24197722/