预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

论J2EE开发Web应用程序中的安全认证机制 现Web应用程序的安全机制是Web应用程序的设计人员和编程人员必须面对的任务。在 J2EE中,Web容器支持应用程序内置的安全机制。 Web应用程序的安全机制有二种组件:认证和授权。基于J2EE的Web容器提供三种类型 的认证机制:基本认证、基于表单的认证、相互认证。由于能够对认证用户界面进行定 制,大多数的Web应用程序都使用基于表单的认证。Web容器使用在Web应用程序的部署 描述符中定义的安全角色对应用程序的Web资源的访问进行授权。 在使用基于表单的认证机制中,应用程序的设计人员和开发人员会遇到3类问题: 1、基于表单的认证如何与数据库和LDAP等其他领域的安全机制协同工作。(这是非常必 要的,因为许多组织已经在数据库和LDAP表单中实现了认证机制。) 2、如何在Web应用程序的部署描述符(web.xml)中增加或删除军政府的授权角色。 3、Web容器在Web资源层次上进行授权;应用程序则需要在单一的Web资源中执行功能层 次上的授权。尽管有许多与基于表单的认证有关的文档和例子,但都没有能够阐明这一问 题。因此,大多数的应用程序都以自己的方式表达安全机制。 本篇文章说明了基于表单的认证如何与其他方面的安全机制,尤其是数据库中的安全机制 协作的问题。它还解释了Web窗口如何使用安全角色执行授权以及应用程序如何扩展这些 安全角色,保护Web资源中的功能。 基于表单的认证 基于表单的认证能够使开发人员定制认证的用户界面。web.xml的login-config小节定义 了认证机制的类型、登录的URI和错误页面。 <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp </form-login-page> <form-error-page>/fail_login.html </form-error-page> </form-login-config> </login-config> 登录表单必须包含输入用户姓名和口令的字段,它们必须被分别命名为j_username和 j_password,表单将这二个值发送给j_security_check逻辑名字。下面是一个该表单如 何在HTML网页中实现的例子: <formmethod="POST" action="j_security_check"> <inputtype="text"name="j_username"> <inputtype="password"name="j_password"> </form> 除非所有的连接都是在SSL上实现的,该表单能够透露用户名和口令。当受保护的Web资 源被访问时,Web容器就会激活为该资源配置的认证机制。 为了实现Web应用程序的安全,Web容器执行下面的步骤: 1、在受保护的Web资源被访问时,判断用户是否被认证。 2、如果用户没有得到认证,则通过重定向到部署描述符中定义的注册页面,要求用户提 供安全信任状。 3、根据为该容器配置的安全领域,确认用户的信任状有效。 4、判断得到认证的用户是否被授权访问部署描述符(web.xml)中定义的Web资源。 就如基本的安全认证机制那样,在Web应用程序的部署描述符中,基于表单的认证不指定 安全区域。也就是说,它不明确地定义用来认证用户的安全区域类型,这就会在它使用什 么样的安全区域认证用户方面引起混淆。 #p#要对用户进行验证,Web窗口需要完成下面的步骤: 1、判断该容器配置的安全区域。 2、使用该安全区域进行认证。 由于数据库和LDAP在维护信息方面提供了更大的灵活性,因此大多数组织都会希望继续 使用它们维护安全认证和授权信息。 许多Web窗口都支持不同类型的安全区域:数据库、LDAP和定制区域。例如,在Tomcat Web容器中,server.xml将数据库配置为其安全区域。 <Realm className="org.apache. catalina.realm.JDBCRealm" debug="99" driverName="oracle.jdbc. driver.OracleDriver" connectionURL="jdbc:oracle:thin: @{IPAddress}:{Port}:{Servicename}" connectionName="{DBUsername}" connectionPassword="{Password}" userTable="users" userNameCol="username" userCredCol="pas