JDBC领域表单身份验证如何

时间:2011-05-28 02:39:54

标签: java forms jdbc realm

  

可能重复:
  JDBC Realm Login Page

大家好,我想创建一个与jdbc领域捆绑在一起的应用程序登录功能,并使用自定义登录表单(基于表单的身份验证登录约束方法)。

请提供链接或非常感谢任何帮助。

请帮忙。

感谢。

1 个答案:

答案 0 :(得分:7)

你使用什么样的容器?jBoss?Tomcat?Derby?
您还需要使用持久存储 - >是的DBMS是必需的。它将是哪一个?MySQL?Sysbase?Oracle PL / SQL?MS SQL?

这里有针对初学者的文档:
http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#JDBCRealm

通常,您需要有一个DB后端,一个JDBC-ODBC驱动程序(jar)和一个容器来为您进行身份验证。

但是,如果您遇到困难,我会为您提供一些指导和见解,以帮助您。

假设您使用的是Tomcat 7.0+和MySQL 5.5,请按照以下步骤操作:
起初看起来很乏味但实际上很简单 首先安装MySQL或您想要的其他DBMS。这里最重要的事情之一是命名并注册一个MySQL服务,安装程序会自动为您执行此操作*。尝试连接到数据库**。
成功完成后,更改默认DBMS特权用户的用户名(root)和密码(“”)。
创建项目架构 在名为“users”和“rights”的模式中创建2个表。
第一个表(用户)必须有两列:用户名和密码。
第二个(权限)还必须有两列:用户名和角色。
首先,将两个表格留空。

现在您必须编辑位于tomcat的Catalina(aka home)conf(配置)目录中的tomcat-users.xml和server.xml。
tomcat-users.xml :此文件包含tomcat可识别的角色。因此,您需要添加至少一个此类角色,例如'client','customer','unauthenticated'e.t.c.
此外,此文件中至少有一个tomcat用户名和密码实例,当您手动或作为服务或通过IDE启动tomcat时使用。该实例 需要 插入数据库,因此您需要手动添加它(SQL代码)以便容器对自身进行身份验证(否则您将获得持久登录失败形成容器本身)。
server.xml:现在,假设您的JDBC-ODBC驱动程序已添加到项目的类路径中,请注释掉UserDatabaseRealm

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>

并在LockoutRealm中添加这样的东西(已经存在)

<Realm className="org.apache.catalina.realm.JDBCRealm" connectionURL="jdbc:mysql://localhost:3306/SCHEMA_NAME_IN_DB?user=DB_USER;password=DB_PASS" debug="99" driverName="com.mysql.jdbc.Driver" userTable="users" userNameCol="username" userCredCol="password" userRoleTable="rights" roleNameCol="role"/>

(或者如果你不想拥有一个LockOutRealm,那就不要了 - &gt;然后将它注释掉并粘贴上面的Realm)

SCHEMA_NAME_IN_DB,DB_USER和DB_PASS是您在创建模式并更改DBMS特权用户的用户名和密码时设置的值。 现在,您需要做的就是在数据库中添加正在运行的tomcat的实例用户名和密码(role:'manager-script')以及MySQL特权用户(角色:custom,即'client')。 添加一个或两个测试用户以进行展示,并将它们与您在tomcat-users.xml中手动添加的角色相关联。

最后,您需要编辑项目的web.xml文件。你需要提供这些: 登录配置,安全角色和安全约束。
登录配置:提供登录页面和登录错误页面。
安全角色:在此处添加您手动添加到users-tomcat.xml文件的安全角色,以及用户必须拥有的安全角色才能通过登录访问任何页面。 安全约束:指定登录用户需要经过身份验证访问的页面。

例子(weeeh!)

<security-constraint>

<display-name>URLsConstraintMechanism</display-name>
   <web-resource-collection>
   <web-resource-name>clientURL</web-resource-name>
   <description>Required access to specified URL with client permissions </description>
        <url-pattern>/securedURL/index.html</url-pattern>
        <http-method>GET</http-method>
        <http-method>PUT</http-method>
        <http-method>POST</http-method>
        <http-method>DELETE</http-method>
        </web-resource-collection>
        ...(这里有更多的网络资源集合)

       <auth-constraint>
       <description>Required privileges to access securely constraint URLs.</description>
       <role-name>client</role-name>
       </auth-constraint>

</security constraint>

<login-config>
    <auth-method>FORM</auth-method>
        <form-login-config>
           <form-login-page>/index.html</form-login-page>
           <form-error-page>/index_denied.html</form-error-page>
        </form-login-config>
    </login-config>

    <security-role>
       <description>Required privileges to access securely constraint URLs.</description>
    <role-name>client</role-name>
    </security-role>

如果您使用IDE(尤其是NetBeans for web.xml),这将更容易。

玩得开心!!!祝你好运:D :):D

关于*和**:
MySQL 5.5的安装程序中存在2个严重错误。
如果您需要帮助,请检查此URL:
https://serverfault.com/questions/214435/error-1067-the-process-terminated-unexpectedly-when-trying-to-install-mysql-on

P.S .:明天我会回来补充一些提示。现在,我要睡觉了!的xD