Java 创建公共Serverlet3登录的逻辑

Java 创建公共Serverlet3登录的逻辑,java,tomcat,jsf,Java,Tomcat,Jsf,我使用Servlet3登录来验证网站中的用户,我有这些登录 网站正常登录(填写Sigup表格) Facebook登录(来自Facebook Id) Twitter登录(来自Twitter) 我已经通过下面的代码对用户进行了身份验证 HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); request

我使用Servlet3登录来验证网站中的用户,我有这些登录

  • 网站正常登录(填写Sigup表格)
  • Facebook登录(来自Facebook Id)
  • Twitter登录(来自Twitter)
  • 我已经通过下面的代码对用户进行了身份验证

     HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
           request.login(username, password);
    
    当用户提供他/她的EMailId和密码并将其存储在数据库中时,它可以很好地用于网站登录

    现在我修改了这个表并添加了更多的列以将Facebookid保存在同一个用户表中,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" />
    
    
    

    此外,还可以检查领域条目触发了哪个查询?

    首先,您不应该将各种身份验证因素合并到一个身份验证表中

    您试图实现的目标在香草王国配置中是不可能实现的。您想要的是tomcat中提供的

    CombinedRealm
    使您能够灵活地将多个数据源配置为身份验证源


    考虑到这种灵活性,您应该能够拥有一个单独的表
    facebook\u auth
    twitter\u auth
    以及更多。将更多列添加到同一个表中以获取可能不断增长的身份验证源是不可持续的。

    可能更适合SoB,但此处的“用户列表”视图是一个数据库视图,它可以获取用户的所有详细信息。是否可以获取由的relm项运行的查询tomcat@subodh-我不知道。显然,它只是选择用户名并验证密码。你需要这个查询做什么?这并不是说您将能够更改它,也不是说它是一个复杂的查询。