Welcome

首页 / 软件开发 / 数据结构与算法 / 利用Geronimo 2.2创建安全的Web Service应用

利用Geronimo 2.2创建安全的Web Service应用2010-10-28 IBM 徐海弘 卢丹随着 Web Service 应用越来越广泛, 如何保证服务能够安全的访问和传输,也逐渐引起开发人员和用户的关注。Web Service 的安全可以从两方面考虑:访问安全和传输安全 .。前者主要指只有授权用户可以访问应用, 而后者侧重于在消息传输过程中如何保证消息的私密性和完整性。本文介绍了如何在 Apache Geronimo 开发和部署安全的 Web Service 应用,以确保信息交互的安全,将侧重介绍如何基于 HTTP/HTTPS 协议保护 Web Service 应用访问和传输的安全。

Web Service Security 简介

在 Java EE 平台上,先后有了 JAX-RPC 和 JAX-WS 两个 Web Service 应用规范,但是两者均未对安全方面做详细规定。那么如何确保 Web Service 应用的安全呢?总所周知,Web Service 应用的服务端和客户端是使用 SOAP 作为交互协议,而 SOAP 作为一个应用层的协议,可以基于多种其他协议传输, 例如 HTTP/HTTPS,FTP 等。 而在实际的应用环境之中, HTTP/HTTPS 协议是应用最为广泛的 .。事实上, 在 SOAP 和 Web Service 的相关规范中, 主要对 SOAP 基于 HTTP/HTTPS 上进行传输作了说明。显然,当我们考虑 Web Service 安全时, 在传输协议进行安全控制便是一个自然而然的选择方案之一。

Apache Geronimo 中的 Web Service Provider

Apache Geronimo 共集成了三个比较流行的 Web Service 引擎, 分别是 Apache Axis, Apache Axis2 和 Apache CXF。 对于 Axis, 通过集成其实现对 JAX-RPC 规范的支持, 后续两个项目, 侧重提供对 JAX-WS 规范的支持。 在 Geronimo 的两个发行版本 Geronimo-Tomcat 和 Geronimo-Jetty 中, 分别默认启用了 Axis2 和 CXF。对于 Geronimo 的两个发行版本,用户可以通过安装对应插件并进行简单配置以切换至另外一种 Web Service 引擎, 详情请参照 Geronimo 的相关文档,,本文不再作累述。 默认情况下, 本文示例均是运行于 Geronimo-Tomcat 发行版本上,并使用 Axis2 作为 Web Service 引擎,并遵循 JAX-WS 规范编写。

一个简单的 Web Service 应用

本文中, 我们以一个在线书店的应用为例, 其提供通过书名检阅图书的功能, 并以 Web Service 的形式对外提供服务。同时还有一个 Web 客户端应用,来访问在线书店提供的服务。如 清单 1所示,服务端是一个简单的 POJO 类,并添加了 WebService 标识。其提供 queryByName的方法,以传入的 name为参数检索是否有符合条件的书籍,最终返回一个 Book对象数组。

清单 1. 在线书店服务端实现

@WebService(name = "BookStore", targetNamespace = "http://geronimo.apache.org/bookstore")
public class BookStoreImpl {

private List<Book> books = new LinkedList<Book>();

@PostConstruct
protected void initialize() {
books.add(new Book("1", "Thinking In Java", "Bruce"));
books.add(new Book("2", "WAS CE Bible", "WAS CE Team"));
}

public Book[] queryByName(String name) {
if (name == null || name.length() == 0) {
return new Book[0];
}
List<Book> foundBookList = new ArrayList<Book>();
for (Book book : books) {
if (book.getName().indexOf(name) != -1) {
foundBookList.add(book);
}
}
return foundBookList.toArray(new Book[0]);
}

@PreDestroy
protected void destory() {
books.clear();
}
}

同时,在部署文件 web.xml 中,我们将 清单 1中所示 POJO 类以 Servlet 形式对外发布,具体配置请参照 清单 2。

清单 2. web.xml 配置片段

<servlet>
<servlet-name>BookStore</servlet-name>
<servlet-class>
org.apache.geronimo.samples.securityWebService.BookStoreImpl
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookStore</servlet-name>
<url-pattern>/bookstore</url-pattern>
</servlet-mapping>

将以上所示的应用部署至 Apache Geronimo 中后,在浏览器输入 http://localhost:8080/SecurityWebServices/bookstore 后,如若 图片 1所示,即表示该在线书店的应用已经成功部署了。

图片 1. BookStoreImplService 访问页面