您现在的位置是: 软件 > 开发者网络 > 程序方舟 > Java专栏 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-Java套接字编程(下)
-2002年国外杀毒软件大比拼
-MediaStudio Pro 6.5教程
-三款卸载软件最新试用

JAAS:灵活的Java安全机制
2003-01-14· ·John Musser/Paul Feuer著 冯睿编译 ··yesky

上一页  1 2 3 4  

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

  现在我们希望将通过命令行调用的程序一直到Web应用程序中。由于Web应用程序与一般的应用程序的交互方式有区别不同,我们将不能使用JAAS提供的标准Callback和CallbackHandler类。因为我们不能在Web程序中打开一个命令窗口让用户输入信息。也许你会想到我们也可以使用基于HTTP的验证,这样我们可以从浏览器弹出的用户名/密码窗口中获得用户输入。但是这样做也有一些问题,它要求建立起双向的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到目前还不是很稳定,但是随着技术的发展,相信会很好地解决这个问题。

上一页  1 2 3 4  

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 Java套接字编程(下)
 Java套接字编程(上)
 漫谈Java中的中文问题
 JavaBeans和关系数据库的镜像
 Java智能卡基础篇——未来Java平台的新发展
 开发Java的又一利器-Visual Cafe
 动态Proxy与Java ACL用户访问控制机制实现
 Java多线程程序设计入门
 Java在手机平台上遭遇尴尬
 将 Java 应用程序迁移到 .NET
 用JavaMail API编写可带附件的邮件发送程序
 利用Java编写手机应用程序Motorola iDEN篇
 Java Servlet API说明文档
 Java中的模式
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!