逻辑创建通用Serverlet3登录

时间:2014-06-08 12:57:39

标签: java tomcat jsf

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

  1. 网站正常登录(填写Sigup表格)
  2. Facebook登录(来自Facebook ID)
  3. Twitter登录(来自Twitter)
  4. 我已通过以下代码验证用户

     HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
           request.login(username, password);
    

    网站登录工作正常,因为用户提供了他/她的EMailId和密码,并将其存储在数据库中。

    现在我修改了表并添加了更多列以将Facebookid保存在同一个用户表中,并且还为Facebook登录FacebookId的密码也作为密码工作。我将为Twitter做同样但我想要相同的Servlet3来验证用户。我怎样才能实现它?

    并在context.xml文件夹

    中添加了META-INF个文件
    <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" />
    

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

1 个答案:

答案 0 :(得分:1)

首先,您不应该将各种身份验证因素归结为单个身份验证表

使用vanilla领域配置无法实现您想要实现的目标。你想要的是tomcat中可用的Combined Realm

CombinedRealm使您可以灵活地将多个数据源配置为auth源。

鉴于这种灵活性,您应该能够拥有单独的表facebook_authtwitter_auth等等。为可能增长的auth源添加更多列到同一个表是不可持续的。