另外,应用程序还可以定义额外的角色,执行对一种Web资源中较低层次的功能的授权。由于应用程序已经配置有一个包含应用程序中所有用户的高层次安全角色,这些低层次的安全角色也就不需要在部署描述符中进行定义。这使得Web应用程序能够利用容器的授权支持,实现与指定应用程序有关的授权。
我们可以在部署描述符中为所有用户定义一个高层次的管理员角色,保护管理类Web资源,这使得管理员角色中的所有用户都能够访问管理网页。为了控制管理网页中的其他功能,我们可以在应用程序中创建 sysadmin或appadmin等新的角色。
应用程序可以对这些安全角色进行扩展,使它们拥有一定的权限。然后,应用程序可以使用这些权限来控制对其功能的访问。
尽管与特定应用程序相关的安全角色不是定义在部署描述符中的,这些角色仍然可以在isUserInRole方法中使用,判断用户是否在这些安全角色中。
优点
·Web应用程序无需实现认证机制,简化Web应用程序的配置。
·Web应用程序能够使用getRemoteUser、IsUserInRole和getUserPrincipal方法实现有规划的安全。
·Web应用程序能够将认证信息传播给EJB容器。
在Tomcat中配置数据库安全区域
1、创建用户表。
该数据库表需要有username和password二个字段。
create table users
(username varchar(20) not null,
password(20) not null) |
2、创建角色表
该表维护着应用程序中角色的清单,它仅仅有rolename一个字段。
create table roles
(rolename varchar(20) not null) |
3、创建用户-角色关联表
该表维护着一个用户和各个角色之间的关联,一个用户可以属于一个或多个角色。
create table user_roles
(username varchar(20) not null,
rolename varchar(20) not null) |
4、在表中插入数据
insert into users values
('user1', 'password')
insert into role values
('manager')
insert into user_roles values
('user1', 'manager') |
5、创建用户表。
该数据库表需要有username和password二个字段。
create table users
(username varchar(20) not null,
password(20) not null) |
6、创建角色表
该表维护着应用程序中角色的清单,它仅仅有rolename一个字段。
create table roles
(rolename varchar(20) not null) |
7、创建用户-角色关联表
该表维护着一个用户和各个角色之间的关联,一个用户可以属于一个或多个角色。
create table user_roles
(username varchar(20) not null,
rolename varchar(20) not null) |
8、在表中插入数据
insert into users values
('user1', 'password')
insert into role values
('manager')
insert into user_roles
values('user1', 'manager') |
9、通过将下面的信息拷贝到{tomcat}\conf\文件夹的server.xml文件中,配置Tomcat。(本例使用了薄客户端驱动程序,Tomcat使用内存区域作为缺省的安全区域。)
<Realm
className="org.apache.
catalina.realm.JDBCRealm"
debug="99"
driverName="oracle.jdbc.
driver.OracleDriver"
connectionURL="jdbc:oracle:
thin:@{IP address}:{Port}:{Servicename}"
connectionName="{DB Username}"
connectionPassword="
{
Password
}
"
userTable="users"
userNameCol="username"
userCredCol="password"
userRoleTable="user_roles"
roleNameCol="rolename"
/> |
用环境变量替换下面的值:
{IP Address} ━━数据库服务器的IP地址
{Port} ━━端口号
{Servicename} ━━服务名字
{DB Username} ━━数据库登录
{Password} ━━数据库登录的口令
10、将Oracle的薄客户机驱动程序JAR文件或数据库的JDBC驱动程序拷贝到{tomcat_home}/server/lib目录中。
11、用下面的安全约束配置Web应用程序的部署描述符
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area
</web-resource-name>
<!-- 定义需要被保护的URL -->
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>
NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- 缺省的登录配置使用基于表单的认证 -->
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Example Form-Based
Authentication Area</realm-name>
<form-login-config>
<form-login-page>/jsp/login.jsp
</form-login-page>
<form-error-page>/jsp/error.jsp
</form-error-page>
</form-login-config>
</login-config> |
需要注意的是,<auth-constraint>中<role-name>的值应当是用户-角色关联表中中角色之一。
在Tomcat中配置例子文件
1、使用上面介绍的命令配置Tomcat。
2、下载security-form-based.war文件,并将它拷贝到Tomcat的webapps目录。
3、启动Tomcat服务器
4、打开一个浏览器,输入下面的地址:http://{ip address:port no}/security-form-based/protected/index.jsp
5、输入用户名和口令。
在WebLogic中配置数据库安全区域
配置Web应用程序的部署描述符,这一过程与在Tomcat中配置非常相似。Tomcat和WebLogic的配置描述符之间的一个差别是,WebLogic配置描述符要求下面的小节,而Tomcat不需要下面的小节:
<security-role>
<description>
Manager security role
</description>
<role-name>
manager
</role-name>
</security-role> |
结论
通过本篇文章,读者应该会对基于表单的认证、以及它如何与数据库安全区域配合进行认证有个比较深刻的认识。Web应用程序能够利用基于表单的认证机制,保护它的资源,同时允许使用以前的安全认证机制。
另外,本篇文章还描述了J2EE Web提供的授权支持层次,以及在不修改Web应用程序的部署描述符的情况下如何定义新的安全角色。