soug 发表于 2015-11-14 14:23:03

Tomcat中的Realm

Realm其实就是一个存放用户名,密码及角色的一个“数据库”。

Tomcat中的Realm有下面几种,你也可以使用自己的Realm,只要实现org.apache.catalina.Realm就可以了。


[*]JDBCRealm

授权信息存在关系数据库中, 通过JDBC驱动访问

数据库中必须至少有两张表,表示用户及角色

用户表必须至少有两个字段,用户名及密码

角色表必须至少有两个字段,用户名及角色

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 className=&quot;org.apache.catalina.realm.JDBCRealm&quot;
driverName=&quot;org.gjt.mm.mysql.Driver&quot;
connectionURL=&quot;jdbc:mysql://localhost/authority?user=dbuser&password=dbpass&quot;
userTable=&quot;users&quot; userNameCol=&quot;user_name&quot; userCredCol=&quot;user_pass&quot;
userRoleTable=&quot;user_roles&quot; roleNameCol=&quot;role_name&quot;/>

[*]DataSourceRealm

授权信息存在关系数据库中, 通过JNDI JDBC数据源访问

数据库中必须至少有两张表,表示用户及角色

用户表必须至少有两个字段,用户名及密码

角色表必须至少有两个字段,用户名及角色

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 className=&quot;org.apache.catalina.realm.DataSourceRealm&quot;
dataSourceName=&quot;jdbc/authority&quot;
userTable=&quot;users&quot; userNameCol=&quot;user_name&quot; userCredCol=&quot;user_pass&quot;
userRoleTable=&quot;user_roles&quot; roleNameCol=&quot;role_name&quot;/>

[*]JNDIRealm

授权信息存在LDAP目录服务器中,通过JNDI提供者访问

<Realm className=&quot;org.apache.catalina.realm.JNDIRealm&quot;
connectionName=&quot;cn=Manager,dc=mycompany,dc=com&quot;
connectionPassword=&quot;secret&quot;
connectionURL=&quot;ldap://localhost:389&quot;
userPassword=&quot;userPassword&quot;
userPattern=&quot;uid={0},ou=people,dc=mycompany,dc=com&quot;
roleBase=&quot;ou=groups,dc=mycompany,dc=com&quot;
roleName=&quot;cn&quot;
roleSearch=&quot;(uniqueMember={0})&quot;
/>

[*]UserDatabaseRealm

默认配置,只是用于少量用户

授权信息存在用户数据JNDI资源中,该资源通常是一个XML文档 (conf/tomcat-users.xml)

<tomcat-users>
<user name=&quot;tomcat&quot; password=&quot;tomcat&quot; roles=&quot;tomcat&quot; />
<user name=&quot;role1&quot;password=&quot;tomcat&quot; roles=&quot;role1&quot;/>
<user name=&quot;both&quot;   password=&quot;tomcat&quot; roles=&quot;tomcat,role1&quot; />
</tomcat-users>

[*]MemoryRealm

授权信息存在内存中的对象集合中,该对象集合来自XML文档 (conf/tomcat-users.xml).

仅用于测试。


[*]JAASRealm

通过JAAS框架访问授权信息,最灵活最开放的一种授权方式。

如果前面几种方式满足不了你的需求,可以先试试这种方式。

<Realm className=&quot;org.apache.catalina.realm.JAASRealm&quot;
appName=&quot;MyFooRealm&quot;
userClassNames=&quot;org.foobar.realm.FooUser&quot;
roleClassNames=&quot;org.foobar.realm.FooRole&quot;/>

[*]CombinedRealm

采用多种方式授权。

<Realm className=&quot;org.apache.catalina.realm.CombinedRealm&quot; >
<Realm className=&quot;org.apache.catalina.realm.UserDatabaseRealm&quot;
resourceName=&quot;UserDatabase&quot;/>
<Realm className=&quot;org.apache.catalina.realm.DataSourceRealm&quot;
dataSourceName=&quot;jdbc/authority&quot;
userTable=&quot;users&quot; userNameCol=&quot;user_name&quot; userCredCol=&quot;user_pass&quot;
userRoleTable=&quot;user_roles&quot; roleNameCol=&quot;role_name&quot;/>
</Realm>

[*]LockOutRealm

多次登录失败后,锁定用户

<Realm className=&quot;org.apache.catalina.realm.LockOutRealm&quot; >
<Realm className=&quot;org.apache.catalina.realm.UserDatabaseRealm&quot;
resourceName=&quot;UserDatabase&quot;/>
</Realm>最后,如果你需要加密密码,那么需要只需要在Realm配置中指定所用的摘要算法就可以了

digest=&quot;MD5&quot;
digest=&quot;SHA&quot;
参考文章

tomcat realm how to
页: [1]
查看完整版本: Tomcat中的Realm