锁定老帖子 主题:J2EE的安全认证机制
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-15
最后修改:2009-02-17
实现Web应用程序的安全机制是Web应用程序的设计人员和编程人员必须面对的任务。在J2EE中,Web容器支持应用程序内置的安全机制。 Web应用程序的安全机制有二种组件:认证和授权。基于J2EE的Web容器提供三种类型的认证机制:基本认证、基于表单的认证、相互认证。由于能够对认证用户界面进行定制,大多数的Web应用程序都使用基于表单的认证。Web容器使用在Web应用程序的部署描述符中定义的安全角色对应用程序的Web资源的访问进行授权。 在使用基于表单的认证机制中,应用程序的设计人员和开发人员会遇到3类问题:
尽管有许多与基于表单的认证有关的文档和例子,但都没有能够阐明这一问题。因此,大多数的应用程序都以自己的方式襀安全机制。 本篇文章说明了基于表单的认证如何与其他方面的安全机制,尤其是数据库中的安全机制协作的问题。它还解释了Web窗口如何使用安全角色执行授权以及应用程序如何扩展这些安全角色,保护Web资源中的功能。
基于表单的认证
基于表单的认证能够使开发人员定制认证的用户界面。web.xml的login-config小节定义了认证机制的类型、登录的URI和错误页面。
<login-config>
登录表单必须包含输入用户姓名和口令的字段,它们必须被分别命名为j_username和j_password,表单将这二个值发送给j_security_check逻辑名字。 下面是一个该表单如何在HTML网页中实现的例子:
<form method="POST" action="j_security_check">
除非所有的连接都是在SSL上实现的,该表单能够透露用户名和口令。当受保护的Web资源被访问时,Web容器就会激活为该资源配置的认证机制。 为了实现Web应用程序的安全,Web容器执行下面的步骤:
象基本的安全认证机制那样,在Web应用程序的部署描述符中,基于表单的认证不指定安全区域。也就是说,它不明确地定义用来认证用户的安全区域类型,这就会在它使用什么样的安全区域认证用户方面引起混淆。 要对用户进行验证,Web窗口需要完成下面的步骤:
由于数据库和LDAP在维护信息方面提供了更大的灵活性,因此大多数组织都会希望继续使用它们维护安全认证和授权信息。 许多Web窗口都支持不同类型的安全区域:数据库、LDAP和定制区域。例如,在Tomcat Web容器中,server.xml将数据库配置为其安全区域。
<Realm className="org.apache.catalina.realm.JDBCRealm"
Tomcat的server.xml的<Realm>标志定义了窗口用来识别一个用户的安全区域的类型。注意,容器对Web应用程序使用该区域,应用程序的认证机制是基于表单的。
授权
一旦用户被识别后,容器就会得到认证用户的安全角色,看用户是否属于在部署描述符中的<auth-constraint>标志中定义的安全角色之一。如果用户不属于任何一个安全角色,则容器会返回一个错误。
<security-constraint>
Web窗口在网页层次上执行认证。然而,商业性应用程序可能还希望对一个网页内的功能进行认证,这会要求在应用程序中定义一些新的附加的与应用程序有关的安全角色。为了控制对功能的访问,应用程序需要理解角色的权限概念。Web容器标准没有解决权限的问题。 由于授权角色是动态的,开发人员常常会感到迷惑,即这些安全角色是否需要添加到部署描述符中。为了使应用程序充分利用安全支持,Web容器只需要在部署描述符中定义的一个角色。因此,应用程序可以定义一个高层次的角色,然后将所有的用户都指派给该角色。这将使该角色中的所有用户都拥有能够访问Web资源的权限。 另外,应用程序还可以定义额外的角色,执行对一种Web资源中较低层次的功能的授权。由于应用程序已经配置有一个包含应用程序中所有用户的高层次安全角色,这些低层次的安全角色也就不需要在部署描述符中进行定义。这使得Web应用程序能够利用容器的授权支持,实现与指定应用程序有关的授权。 我们可以在部署描述符中为所有用户定义一个高层次的管理员角色,保护管理类Web资源,这使得管理员角色中的所有用户都能够访问管理网页。为了控制管理网页中的其他功能,我们可以在应用程序中创建 sysadmin或appadmin等新的角色。 应用程序可以对这些安全角色进行扩展,使它们拥有一定的权限。然后,应用程序可以使用这些权限来控制对其功能的访问。 尽管与特定应用程序相关的安全角色不是定义在部署描述符中的,这些角色仍然可以在isUserInRole方法中使用,判断用户是否在这些安全角色中。
优点
在Tomcat中配置数据库安全区域
1. 创建用户表。
create table users (username varchar(20) not null, password(20) not null)
该表维护着应用程序中角色的清单,它仅仅有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. 通过将下面的信息拷贝到{tomcat}\conf\文件夹的server.xml文件中,配置Tomcat。(本例使用了薄客户端驱动程序,Tomcat使用内存区域作为缺省的安全区域,我们使用基于数据库的安全区域)
<Realm className="org.apache.catalina.realm.JDBCRealm"
用环境变量替换下面的值:
6. 将Oracle的薄客户机驱动程序JAR文件或数据库的JDBC驱动程序拷贝到{tomcat_home}/server/lib目录中。 7. 用下面的安全约束配置Web应用程序的部署描述符
<security-constraint> <transport-guarantee> </transport-guarantee> </user-data-constraint>
需要注意的是,<auth-constraint>中<role-name>的值应当是用户-角色关联表中中角色之一。
在Tomcat中配置例子文件
在WebLogic中配置数据库安全区域
配置Web应用程序的部署描述符,这一过程与在Tomcat中配置非常相似。Tomcat和WebLogic的配置描述符之间的一个差别是,WebLogic配置描述符要求下面的小节,而Tomcat不需要下面的小节:
<security-role>
结论
通过本篇文章,读者应该会对基于表单的认证、以及它如何与数据库安全区域配合进行认证有个比较深刻的认识。Web应用程序能够利用基于表单的认证机制,保护它的资源,同时允许使用以前的安全认证机制。
自己的话:我是按照上面的步骤一步一步完成的,当然某些方面也有所不同,例如:我用的是SQL SERVER数据库,并且在配置安全区域时将driverName, connectionURL等信息直接写入server.xml, 而不是通过环境变量. 我遇到的问题有: 当配置完基于数据库的安全区域后, 当使用"admin/空密码"进入Tomcat的管理界面时, 无法登录, 必须使用数据库中配置的用户名和密码: "user1/password" 登录.
我打开了"{tomcat}\server\webapps\manager\WEB-INF\web.xml " 察看它的配置
<security-constraint> </security-constraint>
它使用的也是manager 的角色。 我又查看了server.xml, 我们上面已经看到了, 我们在server.xml 里加了一个基于数据库的安全区域, 而server.xml里原先有一个基于内存的安全区域:
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" 和 <Resource name="UserDatabase" auth="Container"
这里的"conf/tomcat-users.xml" 就是我们通常的 "admin/空密码" 的来源, 我猜想不能使用"admin/空密码"进入管理页面肯能使因为Tomcat下只能配置一个安全区域造成的. 这个答案是我猜想的,如果有哪位高人知道答案还请不吝赐教.
附件里是BASIC和FORM认证的两个例子, 安全区域都是基于数据库的
<Realm className="org.apache.catalina.realm.JDBCRealm"
要把上面这段配置这个加到server.xml 中. 并将msutil.jar msbase.jar mssqlserver.jar 复制到 "Tomcat 安装目录/server/lib" 下
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 5510 次