快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
r、url、user 和password是必需的,而debug是可选阐述。driver、url、user和password参数 告诉我们如何获得JDBC连接。当然你还可以在ModuleOption域中加入数据库中的 表或列的信息。使用这些参数的目的是为了能够对数据库进行操作。在 LoginModule类的initialize()方法中我们保存了每个参数的值。

我们前面提到一个LoginContext对应的配置文件告诉它应该使用文件中的哪 一个申请。这个信息是通过LgoinContext的构造函数传递的。下面是初始化客户 端的代码,在代码中创建了一个LoginContex对象并调用了login()方法。

ConsoleCallbackHandler cbh = new ConsoleCallbackHandler(); LoginContext lc = new LoginContext("Example", cbh); lc.login();

当LgoinContext.login()方法被调用时,它调用所有加载了的LoginModule 对象的login()方法。在我们的这个例子中是RdbmsLoginModule中的login() 方法。

RdbmsLoginModule中的login()方法进行了下面的操作:

1. 创建两个Callback对象。这些对象从用户输入中获取用户名/密码。程序 中使用了JAAS中的两个Callback类:NameCallback和PasswordCallback(这两个 类包含在javax.security.auth.callback包中)。

2. 通过将callbacks作为参数传递给CallbackHandler的handle()方法来激 活Callback。

3. 通过Callback对象获得用户名/密码。

4. 在rdbmsValidate()方法中通过JDBC在数据库中验证获取的用户名/密 码。

下面是RdbmsLoginModule中的login()方法的代码

public boolean login() throws LoginException { if (callbackHandler == null) throw new LoginException("no handler"); NameCallback nameCb = new NameCallback("user: "); PasswordCallback passCb = new PasswordCallback("password: ", true); callbacks = new Callback[] { nameCb, passCb }; callbackHandler.handle(callbacks); String username = nameCb.getName(); String password = new String(passCb.getPassword()); success = rdbmsValidate(username, password); return(true); }

在ConsoleCallbackHandler类的handle()方法中你可以看到Callback对象 是如何同用户进行交互的:

public void handle(Callback[] callbacks) throws java.io.IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback nameCb = (NameCallback)callbacks[i]; System.out.print(nameCb.getPrompt()); String user=(new BufferedReader(new InputStreamReader(System.in))).readLine(); nameCb.setName(user); } else if (callbacks[i] instanceof PasswordCallback) { PasswordCallback passCb = (PasswordCallback)callbacks[i]; System.out.print(passCb.getPrompt()); String pass=(new BufferedReader(new InputStreamReader(System.in))).readLine(); passCb.setPassword(pass.toCharArray()); } else { throw(new UnsupportedCallbackException(callbacks[i], "Callback class not supported")); } } }

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

时间:2010-12-20

使用JSP和关系数据库进行登录验证

现在我们希望将通过命令行调用的程序一直到Web应用程序中。由于Web应用 程序与一般的应用程序的交互方式有区别不同,我们将不能使用JAAS提供的标准 Callback和CallbackHandler类。因为我们不能在Web程序中打开一个命令窗口让 用户输入信息。也许你会想到我们也可以使用基于HTTP的验证,这样我们可以从 浏览器弹出的用户名/密码窗口中获得用户输入。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号