当前位置: 首页 > 面试题库 >

GlassFish JDBC领域组成员身份

齐建安
2023-03-14
问题内容

我一直在忙于在GlassFish 3.1上设置身份验证,尤其是JDBC领域。我一直在假设以下条件下进行操作:

  • “用户”表包含登录名(“电子邮件地址”)和密码(“密码”)
  • “组”表包含组名称(“名称”)的列表
  • “ User_Group”表匹配用户和组。

但是,我无法在任何地方配置“ User_Group”表,因此我想知道服务器如何将用户按组进行匹配。不用说它没有用。但仔细检查后发现:

  • “用户”表包含登录名(“电子邮件地址”)和密码(“密码”)
  • “组”表包含登录名(“ email_address”) 作为主键 ,并在单列(“组”)中以逗号分隔的组名列表(“ Administrator,User”)

这是正确的吗?如果是,为什么还要创建一个单独的“组”表呢?既然似乎每个登录名只能有一个组列表(“ email_address”),难道不如简单地将一个名为“
groups”的列添加到“ User”表并完全丢弃“ Group”表一样简单吗?

谢谢!


问题答案:

我不确定配置JDBC领域需要遵循哪些内容,但是它似乎不完整或不正确。以下是我用来配置JDBC领域的配置的描述。

数据库结构(作为DDL语句):

USERS表

CREATE TABLE USERS (
        USERID VARCHAR(50) NOT NULL,
        PASSWORD VARCHAR(128) NOT NULL
    );

--//@UNDO

DROP TABLE USERS;

GROUPS表

CREATE TABLE GROUPS (
        GROUPID VARCHAR(20) NOT NULL
    );

--//@UNDO

DROP TABLE GROUPS;

USERS_GROUPS连接表

CREATE TABLE USERS_GROUPS (
        GROUPID VARCHAR(20) NOT NULL,
        USERID VARCHAR(50) NOT NULL
    );

--//@UNDO

DROP TABLE USERS_GROUPS;

来自的Glassfish JDBCRealm配置片段domain.xml

    <auth-realm name="MyRealm" classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm">
      <property description="null" name="jaas-context" value="jdbcRealm"></property>
      <property name="encoding" value="Hex"></property>
      <property description="null" name="password-column" value="PASSWORD"></property>
      <property name="datasource-jndi" value="jdbc/myDS"></property>
      <property name="group-table" value="USERS_GROUPS"></property>
      <property name="user-table" value="USERS"></property>
      <property description="null" name="group-name-column" value="GROUPID"></property>
      <property name="digest-algorithm" value="SHA-512"></property>
      <property description="null" name="user-name-column" value="USERID"></property>
    </auth-realm>

请注意,该group-name- column属性的值为GROUPID,它映射到GROUPID联接表的列USERS_GROUPS而不是组表GROUPS。这是因为JDBCRealm发出以下SQL语句(如果您反编译com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm该类):

密码查询,其中用户ID是从DigestLoginModule传递的参数:

SELECT <passwordColumn> FROM <userTable> WHERE <userNameColumn> = ?

组查询,以用户ID作为参数传递:

SELECT <groupNameColumn> FROM <groupTable> WHERE <groupTableUserNameColumn> = ?;

考虑第二个查询的结构时,很显然组表必须包含映射到组ID的用户ID(这导致映射到多个组的用户的组数据重复),或者组表必须是将用户映射到组的联接表。



 类似资料:
  • 在DropWizard中,我可以设置基本身份验证,如下所示(在impl中): 领域在DropWizard中是什么意思,在中指定它有什么意义?它创造了一些东西与这个领域在引擎盖下?

  • 3.6 ABP领域层 - 领域事件 在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合

  • 3.4 ABP领域层 - 领域服务 3.4.1 简介 领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Application Servi

  • 问题内容: 大家好,我想创建一个与jdbc领域和自定义登录表单(基于表单的身份验证登录约束方法)捆绑在一起的应用程序登录功能。 请提供链接或任何帮助,我们将不胜感激。 请帮忙。 谢谢。 问题答案: 您使用哪种容器?jBoss?Tomcat?Derby? 您还需要使用持久性存储->是,需要DBMS。它是哪一个?MySQL,Sysbase,Oracle PL / SQL,MS SQL? 此处提供了可供

  • 成员身份验证 PDF版下载 OAuth2简介 如流平台提供了OAuth的授权登录方式,可以使如流客户端(移动端或者桌面端内嵌打开)打开的网页获取成员的身份信息,从而免去登录环节。 企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的身份信息(UserId)。 第一步:构造网页授权链接 获取用户在如流客户端打开应用(或者链接)时的用户身份,如流提供两

  • 钥匙斗篷中有2个领域:主人和自定义。两个都有admin用户。 自定义领域管理添加新用户new_admin并通过管理控制台为其分配角色admin。