混淆web.xml中的<security-role> </security-role>

时间:2011-03-14 02:51:56

标签: java database tomcat web.xml realm

我明白了 <security-role><role-name>Admin</role-name></security-role> 用于容器映射它与tomcat-users.xml(领域)

但我很困惑,如果我没有使用领域,但我使用数据库如何容器知道我的数据库中的哪个字段是用于角色名称,或者它在数据库字段名称中具有命名约定,如“role_name”,容器将知道它< / p>

感谢您提出的所有建议

1 个答案:

答案 0 :(得分:6)

只需使用数据库领域,并在服务器配置文件的<Realm>元素中配置表名和列名。对于Tomcat,这在Realm HOWTO中有所描述。以下是来自JDBCRealm chapter

的相关摘录
  

快速入门

     

要设置Tomcat以使用JDBCRealm,您需要按照以下步骤操作:

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

    领域元素属性

         

    要配置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个文件。   这是使用MySQL的一个例子   数据库称为“权威”,   配置了所描述的表   上面,并使用用户名访问   “dbuser”和密码“dbpass”:

    <Realm className="org.apache.catalina.realm.JDBCRealm"
          driverName="org.gjt.mm.mysql.Driver"  
       connectionURL="jdbc:mysql://localhost/authority?user=dbuser&amp;password=dbpass"
           userTable="users" userNameCol="user_name" userCredCol="user_pass"   
       userRoleTable="user_roles" roleNameCol="role_name"/>
    

很清楚,不是吗?如果您已经在Tomcat中配置了JDBC数据源(用于连接池和打开),那么您也可以使用DataSourceRealm代替。

您所谈论的tomcat-users.xml就是UserDatabaseRealm