一尘不染

令人困惑 在web.xml中

tomcat

我了解这 <security-role><role-name>Admin</role-name></security-role> 是使用tomcat-
users.xml(领域)进行容器映射的

但是我是否不使用领域而感到困惑,因为我使用数据库如何使容器知道我数据库中的哪个字段用于角色名称,或者它在数据库字段名称中具有命名约定,例如“
role_name”,而容器会知道

谢谢你的建议


阅读 213

收藏
2020-06-16

共1个答案

一尘不染

只需使用数据库领域并<Realm>在服务器配置文件中的元素中配置表名和列名即可。对于Tomcat,这在Realm
HOWTO
中进行了描述。这是JDBCRealm一章的相关摘录

快速开始

要将Tomcat设置为使用JDBCRealm,您将需要执行以下步骤:

  1. 如果尚未这样做,请在数据库中创建符合上述要求的表和列。
  2. 配置供Tomcat使用的数据库用户名和密码,该用户名和密码至少具有对上述表的只读访问权限。(Tomcat绝不会尝试写入这些表。)
  3. 将要使用的JDBC驱动程序的副本放在 $CATALINA_HOME/lib目录中。请注意,只能识别JAR文件!
  4. <Realm>如下所述,在$CATALINA_BASE/conf/server.xml文件中设置一个元素 。
  5. 如果Tomcat 6已经在运行,请重新启动它。

领域元素属性

要配置JDBCRealm,您将创建一个<Realm>元素并将其嵌套在$CATALINA_BASE/conf/server.xml
文件中,如上所述。JDBCRealm的属性在Realm配置文档中定义。

创建所需表的示例SQL脚本可能类似于以下内容(根据特定数据库的需要调整语法):

create table users (
  user_name         varchar(15) not null primary key,  
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key(user_name, role_name)
);

示例Realm元素包含(注释掉)在默认 $CATALINA_BASE/conf/server.xml文件中。这是一个使用名为“
authority”的MySQL数据库的示例,该数据库配置有上述表,并通过用户名“ dbuser”和密码“ dbpass”进行访问:

<Realm className="org.apache.catalina.realm.JDBCRealm"
      driverName="org.gjt.mm.mysql.Driver"

connectionURL=”jdbc:mysql://localhost/authority?user=dbuser&password=dbpass”
userTable=”users” userNameCol=”user_name” userCredCol=”user_pass”
userRoleTable=”user_roles” roleNameCol=”role_name”/>

很清楚,不是吗?如果您已经在Tomcat中配置了JDBC数据源(用于连接池及其后),那么也可以改用DataSourceRealm

tomcat- users.xml你所谈论的是通过调用方式是UserDatabaseRealm

2020-06-16