快速业务通道

在Apache Geronimo应用程序中实现和部署Web服务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
合在一起。

为了演示 Web 服务处理程序的使用,我们实现了 WS-Security 的一部分功能 。因为处理程序在方法级授权之后执行,所以处理程序不能直接用于身份验证( 例如,这个业务逻辑 bean 无法公开为通过定制的处理程序执行身份验证的 Web 服务)。所以,在这个例子中,Web 服务代表外观,后端 bean 不要求授权。在 执行时,这个 bean 获得安全处理程序捕获的凭证,执行手工身份验证,并以经 过身份验证的客户机的身份调用 BusinessLogic EJB 方法。

服务器端处理程序在 webservices.xml 中指定。这个处理程序是一个实现 javax.xml.rpc.handler.Handler 接口的类。这个处理程序类的实例用于过滤所 有到达的请求、发出的响应和错误。

客户端处理程序在 web.xml 部署描述符中的服务引用中指定。

服务器处理程序 WSSecurityServerHandler 被开发成示例应用程序的一部分 ,它从到达的 SOAP 请求中提取用户名和密码,并将它们放到线程本地变量中。 这是目前将数据传输到 Web 服务后端 servlet 的惟一一种可靠的方式。Web 服 务后端 servlet 使用这些凭证进行身份验证,并使用 Geronimo 特定的身份验证 代码以经过身份验证的主体的身份调用 BusinessLogic EJB [因为只使用 Java Authentication and Authorization Service(JAAS)身份验证是不够的]。

清单 9 中的片段展示如何从安全处理程序接收主体的凭证,并以这个主体的 身份调用 EJB 方法:

清单 9. 作为某个安全主体调用业务逻辑

// username and password are obtained from the  security handler LoginContext ctx = createLoginContext(username, password); ctx.login(); try {    Set set = ctx.getSubject().getPrincipals(      org.apache.geronimo.security.IdentificationPrincipal.class);    IdentificationPrincipal idp = (IdentificationPrincipal)  set.iterator().next();    Subject subject =      org.apache.geronimo.security.ContextManager.getRegisteredSubject (idp.getId());    org.apache.geronimo.security.ContextManager.setCurrentCaller (subject);    return (Order[])Subject.doAs(subject, new  PrivilegedExceptionAction() {      public Object run() throws Exception {        BusinessLogic logic = BusinessLogicUtil.getHome ().create();        return logic.getOrders();      }     }); } finally {    ctx.logout(); }

这个片段不能转移到处理程序代码中,因为业务方法(在这个例子中是 getOrders)应该以另一个主体的身份运行(doAs 调用),而处理程序在调用服 务方法之前执行。

在Apache Geronimo应用程序中实现和部署Web服务(6)

时间:2011-08-27 IBM Ivan Dubrov

清单 10 展示了为这个应用程序开发的示例 Web 服务部署描述符:

清单 10. Web 服务部署描述符

<?xml version="1.0" encoding="UTF-8"?> <webservices xmlns="http://java.sun.com/xml/ns/j2ee"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"version="1 .1">   <webservice-description>    <webservice-description-name>BusinessLogic</webservice- description-name>    <wsdl-file>WEB-INF/BusinessLogic.wsdl</wsdl-file>    <jaxrpc-mapping-file>WEB-INF/jaxrpc-mapping.xml&

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