快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
但是这样做也有一些问题,它 要求建立起双向的HTTP连接(在login()方法很难实现双向连接)。因此在我 们的例子中我们会使用利用表单进行登录,从表单中获取用户输入的信息,然后 通过RdbmsLoginModule类验证它。

由于我们没有在应用层同LoginModule直接打交道,而是通过LgoinContext来 调用其中的方法的,我们如何将获得用户名和密码放入LoginModule对象中呢? 我们可以使用其它的方法来绕过这个问题,例如我们可以在创建LoginContext对 象前先初始化一个Subject对象,在Subject对象的凭证中保存用户名和密码。然 后我们可以将该Subject对象传递给LoginContext的构造函数。这种方法虽然从 技术上来说没有什么问题,但是它在应用程序层增加了很多与安全机制相关的代 码。而且通常是在验证后向Subject送入凭证,而不是之前。

前面我们提到可以实现一个CallbackHandler类,然后将它的实例传递给 LoginContext对象。在这里我们可以采用类似的方法来处理用户名和密码。我们 实现了一个新的类PassiveCallbackHandler。下面是在JSP中使用该类的代码:

String user = request.getParameter("user"); String pass = request.getParameter("pass"); PassiveCallbackHandler cbh = new PassiveCallbackHandler(user, pass); LoginContext lc = new LoginContext("Example", cbh);

PassiveCallbackHandler中构造函数的参数包含了用户名和密码。因此它可 以在Callbick对象中设定正确的值。下面是PassiveCallbackHandler类的handle ()方法的代码:

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]; nameCb.setName(user); } else if(callbacks[i] instanceof PasswordCallback) { PasswordCallback passCb = (PasswordCallback)callbacks[i]; passCb.setPassword(pass.toCharArray()); } else { throw(new UnsupportedCallbackException(callbacks[i], "Callback class not supported")); } } } }

从上面的代码中可以发现实际上我们只是从ConsoleCallbackHandler中去除 了那些提示用户输入的代码。

在运行这个JSP例子的时候,我们需要设定系统属性,这样LgoinContext对象 才知道如何查找名称为"Example"的配置。我们使用的是Resin服务器。在 resin.conf中,我们增加了一个<caucho.com>节点:

<system-property java.security.auth.login.config="/resin/conf/jaas.config"/>

小结

JAAS通过提供动态的、可扩展的模型来进行用户验证和控制权限,从而使应 用程序有更加健壮的安全机制。同时它还能够让你能够很轻松地创建自己的登录 机制。JAAS可以同时在在客户端和服务器端应用程序上工作。虽然在服务器端的 JAAS到目前还不是很稳定,但是随着技术的发展,相信会很好地解决这个问题。

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