【问题标题】:question about GlassFish/Tomcat security realms关于 GlassFish/Tomcat 安全领域的问题
【发布时间】:2011-07-11 02:37:41
【问题描述】:

我已将 GlassFish 设置为使用“JDBCRealm”。配置看起来像这样,它工作正常:

<JDBCRealm userTable="users" userNameCol="user_name" 
userCredCol="user_pass" userRoleTable="user_roles" 
roleNameCol="role_name" ... />

我的数据库目前如下所示:

- USERS -
USER_NAME | USER_PASS
steve | password1

- USER_ROLES -
USER_NAME | ROLE_NAME
steve | ADMIN

我的问题是,如果我想规范化数据库中的数据,如何配置一个可以理解新数据库设计的领域?我是否必须编写自定义“领域”对象或类似的东西?

相反,我希望我的数据库看起来像这样:

- USERS -
USER_ID | USER_NAME | USER_PASS
1 | steve | password1

- ROLES -
ROLE_ID | ROLE_NAME
2 | ADMIN

- USER_ROLES -
USER_ID | ROLE_ID
1 | 2

非常感谢任何帮助!

【问题讨论】:

    标签: security jsf tomcat glassfish jdbcrealm


    【解决方案1】:

    它应该工作简单。几天前我刚刚为 Glassfish 服务器做了这件事。但我认为 Tomcat 应该是类似的。我有 3 张桌子:

    • 用户(登录名 (pk)、密码、...)
    • 组(group_id (pk), group_name)
    • group_has_user (login (fk from user table), group_id (fk from group table))

    我的 JDBC 领域如下所示:

    <auth-realm name="Register-User" classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm">
              <property name="jaas-context" value="jdbcRealm" />
              <property name="datasource-jndi" value="jdbc/ladb" />
              <property name="user-table" value="user" />
              <property name="user-name-column" value="login" />
              <property name="password-column" value="password" />
              <property name="group-table" value="group_has_user" />
              <property name="group-name-column" value="group_id" />
              <property name="digest-algorithm" value="SHA-256" />
    

    如果您遇到问题,请确保 group_id 列在组表和连接表中具有相同的名称。

    【讨论】:

      【解决方案2】:

      我们解决这个问题的方法是规范化数据库并为 glassfish 创建视图。

                            Table "public.admin"
          Column     |            Type             | Modifiers 
      ---------------+-----------------------------+-----------
       id            | bigint                      | not null
       login         | character varying(255)      | not null
       password      | character varying(255)      | not null
      
      
                   Table "public.role"
       Column |          Type          | Modifiers 
      --------+------------------------+-----------
       id     | bigint                 | not null
       name   | character varying(255) | 
      
      
      
        Table "public.role_admins"
        Column  |  Type  | Modifiers 
      ----------+--------+-----------
       role_id  | bigint | not null
       admin_id | bigint | not null
      

      这里是视图:

                 View "public.v_admin_role"
        Column   |          Type          | Modifiers 
      -----------+------------------------+-----------
       login     | character varying(255) | 
       password  | character varying(255) | 
       role_name | character varying(255) | 
      View definition:
       SELECT a.login, a.password, r.name AS role_name
         FROM admin a
         JOIN role_admins ra ON ra.admin_id = a.id
         JOIN role r ON r.id = ra.role_id
        WHERE a.active = true;
      

      还有配置

      <auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="gcsiadmin">
        <property name="user-name-column" value="login"/>
        <property name="password-column" value="password"/>
        <property name="group-name-column" value="role_name"/>
        <property name="datasource-jndi" value="jdbc/GcsiDS"/>
        <property name="user-table" value="v_admin_role"/>
        <property name="group-table" value="v_admin_role"/>
        <property name="jaas-context" value="jdbcRealm"/>
      </auth-realm>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        相关资源
        最近更新 更多