快速业务通道

JAAS - 灵活的Java安全机制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
申请对应了一个或多个特定的LoginModule对象 。

当你的代码构造一个LoginContext对象时,你需要把配置文件中申请的名称 传递给它。LoginContext将会根据申请中的信息决定激活哪些LoginModule对象 ,按照什么顺序激活以及使用什么规则激活。

配置文件的结构如下所示:

Application { ModuleClass Flag ModuleOptions; ModuleClass Flag ModuleOptions; ... }; Application { ModuleClass Flag ModuleOptions; ... }; ...

下面是一个名称为Sample的申请

Sample { com.sun.security.auth.module.NTLoginModule Rquired debug=true; }

JAAS - 灵活的Java安全机制(4)

时间:2010-12-20

上面这个简单的申请指定了LoginContext对象应该使用NTLoginModule进行验 证。类的名称在ModuleClass中被指定。Flag控制当申请中包含了多个 LoginModule时进行登录时的行为:Required、Sufficient、Requisite和 Optional。最常用的是Required,使用它意味着对应的LoginModule对象必须被 调用,并且必须需要通过所有的验证。由于Flag本身的复杂性,本文在这里不作 深究。

ModuleOption允许有多个参数。例如你可以设定调试参数为True (debug=true),这样诊断输出将被送到System.out中。

配置文件可以被任意命名,并且可以被放在任何位置。JAAS框架通过使用 java.securty.auth.long.config属性来确定配置文件的位置。例如当你的应用 程序是JaasTest,配置文件是当前目录下的jaas.config,你需要在命令行中输 入:

java -Djava.security.auth.login.config=jass.config JavaTest

图二描述了配置文件中各元素之间的关系

JAAS - 灵活的Java安全机制 - 编程入门网

图二 JAAS的配置文件

通过命令行方式进行登录验证

为了说明JAAS到底能干什么,我在这里编写了两个例子。一个是简单的由命 令行输入调用的程序,另一个是服务器端的JSP程序。这两个程序都通过用户名 /密码的方式进行登录,然后使用关系数据库对其进行验证。

为了通过数据库进行验证,我们需要:

1. 实现RdbmsLoginModul类,该类可以对输入的信息进行验证。

2. 编辑一个配置文件,告诉LoginContext如何使用RdbmsLoginModule。

3. 实现ConsoleCallbackHandler类,通过该类可以获取用户的输入。

4. 编写应用程序代码。

在RdbmsLoginModul类中,我们必须实现LgoinModule接口中的五个方法。首 先是initialize()方法:

public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { this.subject = subject; this.callbackHandler = callbackHandler; this.sharedState = sharedState; this.options = options; url = (String)options.get("url"); driverClass = (String)options.get("driver"); debug = "true".equalsIgnoreCase((String)options.get("debug")); }

LoginContext在调用login()方法时会调用initialize()方法。 RdbmsLoginModule的第一个任务就是在类中保存输入参数的引用。在验证成功后 将向Subject对象中送入Principal对象和凭证。

CallbackHandler对象将会在login()方法中被使用到。sharedState可以使 数据在不同的LoginModule对象之间共享,但是在这个例子中我们不会使用它。 最后是名为options的Map对象。options向LgoinModule对象传递在配置文件 ModuleOption域中定义的参数的值。配置文件如下所示:

Example { RdbmsLoginModule required driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/jaasdb?user=root" debug="true"; };

JAAS - 灵活的Java安全机制(5)

时间:2010-12-20

在配置文件中,RdbmsLoginModule包含了五个参数,其中drive

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号