- 浏览: 37548 次
文章分类
- 全部博客 (37)
- java (37)
- [文摘20081112]经典语录 (1)
- php+mysql预查询prepare 与普通查询的性能对比 (1)
- Android采用SharedPreferences保存用户登录信息 (1)
- 找bug记(2) (1)
- 细节优化提升资源利用率 (1)
- java(j2se)学习笔记----类注释文档编写方法? (1)
- 如何查看Class文件编译的JDK版本 (1)
- 验证码显示不了,报Could not initialize class sun.awt.X11GraphicsEnvironment (1)
- Android使用KSOAP2调用WebService及正确导入jar包的问题 (1)
- The content of the adapter has changed but ListView did not receive a notification. (1)
- 很想写些CMMI的东西 (1)
- JPA & Hibernate 注解 (1)
- Java反编译工具――Jode (1)
- Eclipse3.0.0插件安装解决方法 (1)
- SVG简介及相关工具 (1)
- 开始在这个BLOG里放一部分MapXtreme2004相关代码 (1)
- 支持.NET环境的GIS开发工具MapXtreme2004 (1)
- 将DAT格式视频文件转换成ASF和WMV格式视频文件 (1)
- 《漫谈设计模式》一书终于出版了 (1)
- 一位程序员的一个LBS应用的想法 (1)
- 一刷网络投票的小程序 (1)
- 面试字符串处理之单词翻转 (1)
- rails 上载xls文件 (1)
- 如何获得Java项目文件所在的相对路径 (1)
- 学习FlexViewer(一)——事件和框架 (1)
- Android开发之消息处理机制(二)——消息循环 (1)
- JAVA操作——获取文件扩展名,去掉文件扩展名 (1)
- freemarker 读取session 值 (1)
- xfire 使用用户名/密码进行身份认证 (1)
- java中的图片处理 (1)
- HTC Touch HD2/LEO/T8585刷机教程 进三色屏 (1)
- js性能问题 (1)
- js 事件收集 (1)
最新评论
-
Glorin:
非常感谢你,让我的问题能够得以解决。
验证码显示不了,报Could not initialize class sun.awt.X11GraphicsEnvironment -
thzthbthy:
/*
* Java文件操作 获取文件扩展名
*
...
JAVA操作——获取文件扩展名,去掉文件扩展名 -
jyjava:
你debug调试,应该很快会定位到的
找bug记(2) -
xuehua1987:
上面的方法返回值是void ,怎么可以返回你取到的连接???? ...
找bug记(2)
对SOAP报文进行身份认证的方式很多,不过都是通过在SOAP报文头中添加一些安全凭证(Security Token)信息来完成的,主要包括以下一些身份凭证:<br>? 用户名/密码;<br>?? X.509证书;<br>?? Kerberos票据和认证者;<br>?? SIM卡的移动设备安全性凭证。<br>其中用户名/密码是最简单的身份认证方式,它不需要密钥、数字证书,所以也就不需要CA,部署实施简单易行。下面我们就通过例子讲解如何进行基于用户名/密码的SOAP认证。这个实例让客户端提供用户名/密码,服务端验证客户端的身份,而客户端按正常方式接收SOAP响应报文。<br>服务端<br>服务端创建一个applicationContext-ws-security.xml,让BbtForumService拥有用户名/密码的认证功能。
<table class="ln" border="1" cellspacing="0" align="center"><tbody><tr>
<td>
<img class="fit-image" src="http://book.51cto.com/files/uploadimg/20070814/152509754.gif" border="0" alt="" width="498" height="332"><a href="http://book.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank"></a>
</td>
</tr></tbody></table>
<table class="ln" border="1" cellspacing="0" align="center"><tbody><tr>
<td>
<img class="fit-image" src="http://book.51cto.com/files/uploadimg/20070814/152519118.gif" border="0" alt="" width="498" height="221"><a href="http://book.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank"></a>
</td>
</tr></tbody></table>
由于需要对SOAP进行前置处理,所以必须将STAX流模型的SOAP转换为DOM模型,这通过在② 处指定一个DOMInHandler来完成。在③处注册了一个处理SOAP报文的WSS4JInHandler,用于对接收的SOAP报文进行前置处理,与其对应的是WSS4J OutHandler,它对SOAP报文进行后置处理。两者都具有极高的定制性,可以通过配置定制各种加工逻辑,这可以通过合理设置properties 属性达到各种加工处理的要求。<br>在④处,我们定义了一个action属性,它定义了需要处理的动作,UsernameToken表示进行用户名/密码认证的操作。其他的动作包括Encrypt、Signature、Timestamp、SamlTokenUnsigned等,可以同时设置多个动作,多个动作之间用空格分隔,如<prop key="action">Encrypt Signature</prop>。<br>不同的动作通过设置配套的其他属性提供相应的操作,我们通过passwordCallback Class属性指定一个密码回调实现类来处理UsernameToken密码查询和认证的工作。<br>passwordCallbackClass指定的类必须实现javax.security.auth.callback.CallbackHandler接口,其代码如代码清单16-11所示:
<table class="ln" border="1" cellspacing="0" align="center"><tbody><tr>
<td>
</a>[url=http://book.51cto.com/files/uploadimg/20070814/151736684.gif]<img class="fit-image" src="http://book.51cto.com/files/uploadimg/20070814/151736684.gif" border="0" alt="" width="498" height="497"><a href="http://images.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank">[/url]
</td>
</tr></tbody></table>
PasswordHandle负责根据用户名查询正确的密码,这里,我们通过一个pwMockDB模拟存储用户名密码的数据库,如①所示。如果客户端以明文形式发送密码,UtPasswordHandler可以直接判断密码的正确性,如②-4所示。反之,如果以摘要的方式发送密码,UtPasswordHandler必须将正确的密码设置到callback中,以便WSS4JInHandler进行判断,如②-5所示。这里为明文和密文的密码分别提供了处理逻辑,但在一般情况下,密码是以明文还是密文发送是交互双方已经约定好的。<br>用户也可以通过扩展XFire的AbstractHandler定义自己的Handler,回调接口会传入MessageContext实例,可以通过MessageContext访问到SOAP中用户名/密码的信息进行认证。<br>客户端<br>现在服务端的Web Service服务已经需要对请求SOAP报文进行用户名/密码的认证了,客户端当然要进行相应的调整,以便在发送SOAP请求报文时添加用户名/密码的信息。
<table class="ln" border="1" cellspacing="0" align="center"><tbody><tr>
<td>
</a>[url=http://book.51cto.com/files/uploadimg/20070814/1418371.gif]<img class="fit-image" src="http://book.51cto.com/files/uploadimg/20070814/151747670.gif" border="0" alt="" width="498" height="294">?<a href="http://images.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank">[/url]
</td>
</tr></tbody></table>
<table class="ln" border="1" cellspacing="0" align="center"><tbody><tr>
<td>
</a>[url=http://book.51cto.com/files/uploadimg/20070814/1418372.gif]<img class="fit-image" src="http://book.51cto.com/files/uploadimg/20070814/152100815.gif" border="0" alt="" width="496" height="305"><a href="http://images.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank">[/url]
</td>
</tr></tbody></table>
<table class="ln" border="1" cellspacing="0" align="center"><tbody><tr>
<td>
</a>[url=http://book.51cto.com/files/uploadimg/20070814/1418372.gif]<img class="fit-image" src="http://book.51cto.com/files/uploadimg/20070814/152113502.gif" border="0" alt="" width="498" height="179"><a href="http://images.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank">[/url]
</td>
</tr></tbody></table>
服务端在接收添加WS-Security信息的SOAP请求报文前必须进行前置处理,和服务端相对应,客户端在发送SOAP请求报文前进行前置处理,添加WS-Security信息。因此使用DOMOutHandler将DOM转换为STAX的流模型,此外通过定义一个WSS4JOutHandler完成在SOAP头添加用户名/密码信息的操作。<br>在④-2处,定义了密码的类型,WSConstants.PW_DIGEST表示密码以摘要方式发送,这可以保证密码的传输安全。设置为WSConstants.PW_TEXT表示密码以明文方式发送。④-3指定了一个用户名client,一般情况下,用户的密码保存在文件中或数据库中,因此通过指定一个回调类 UtPasswordHandler完成用户密码的获取操作,如④-4,回调类必须实现 javax.security.auth.callback.CallbackHandler接口,UtPasswordHandler的代码如代码清单 16-13所示:
<table class="ln" border="1" cellspacing="0" align="center"><tbody><tr>
<td>
<img class="fit-image" src="http://book.51cto.com/files/uploadimg/20070814/152141730.gif" border="0" alt="" width="494" height="297"><a href="http://book.51cto.com/files/uploadimg/20060921/153223104.gif" target="_blank"></a>
</td>
</tr></tbody></table>
运行代码清单16-12,通过类似于TcpTrace的工具截取SOAP请求报文,用户将可以看到带WS-Security报文头的SOAP报文:
<table border="1" cellspacing="0" cellpadding="2" width="400" align="center"><tbody><tr>
<td class="code">
<pre><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<wsse:Security soap:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401
-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>client</wsse:Username>
<wsse:Password>wOtW+umoWdf/7s7pyJrlFAp2xJo=</wsse:Password>
<wsse:Nonce>zJlCTQNCa+jHur2JdJF8Fw==</wsse:Nonce>
<wsu:Created>2007-04-09T09:11:05.593Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<getRefinedTopicCount
xmlns="http://server.xfire.baobaotao.com">
<in0 xmlns="http://server.xfire.baobaotao.com">20</in0>
</getRefinedTopicCount>
</soap:Body>
</soap:Envelope></pre>
</td>
</tr></tbody></table>
报文中粗体的部分为WS-Security的信息,为了简洁,我们特意删除了报文中一些命名空间的内容。<br><wsse:UsernameToken> 元素被导入到SOAP报头中以携带身份信息。wsse:Username用于指定一个用户名,而<wsse:Password>则用于指定密码。有两种类型的密码:PasswordText和PasswordDigest,PasswordText以明文格式表示密码,而 PasswordDigest则被定义为Base64编码的SHA-1散列值。还有两个可选元素<wsse:Nonce> 和<wsu:Created>:前者是发送方创建的一个随机值,后者则是一个时间戳。如果<wsse:Nonce> 和<wsu:Created>两个元素中至少出现了一个,计算PasswordDigest的算法如下(每次PasswordDigest的值都是不一样的):<br>PasswordDigest = Base64(SHA-1(nonce+created+password))<br>如果没有使用其他的安全机制,PasswordDigest是通过非保密渠道发送用户名和口令的最佳方法。即使使用XML加密对<wsse:Password>元素进行加密,PasswordText依然可以使用。
发表评论
-
js 事件收集
2012-02-08 13:18 512一般事件 事件 浏 ... -
js性能问题
2012-02-08 13:13 724随着web应用的复杂度日渐提高,JavaScript代 ... -
HTC Touch HD2/LEO/T8585刷机教程 进三色屏
2012-02-07 15:53 1015[size=14px; line-height: 21 ... -
java中的图片处理
2012-02-04 12:44 767附件中的文件包括: 1.图片的压缩 2.处理圆角图片 ... -
freemarker 读取session 值
2012-02-03 08:25 2441<span style="font-f ... -
JAVA操作——获取文件扩展名,去掉文件扩展名
2012-01-31 14:08 2223<p> 昨天收邮件,得知要参加一个产品部的 ... -
Android开发之消息处理机制(二)——消息循环
2012-01-11 14:53 763<h1>Android开发 ... -
学习FlexViewer(一)——事件和框架
2012-01-11 11:44 1185????? 上午做了关于FlexViewer的讲座,项 ... -
如何获得Java项目文件所在的相对路径
2011-12-28 15:08 2259[size=18px;]今天在开发中做一个java项 ... -
rails 上载xls文件
2011-12-21 12:14 1065?<span style="font- ... -
面试字符串处理之单词翻转
2011-12-21 11:34 843<p align="left&quo ... -
一刷网络投票的小程序
2011-12-20 11:44 1218最近看到网上一投 ... -
一位程序员的一个LBS应用的想法
2011-12-20 10:14 683最近状态不佳, ... -
《漫谈设计模式》一书终于出版了
2011-12-19 13:09 883<p class="MsoNor ... -
将DAT格式视频文件转换成ASF和WMV格式视频文件
2011-12-17 15:29 854以*.ASF和*.WMV为后缀名的视频文件,是微软针对 ... -
支持.NET环境的GIS开发工具MapXtreme2004
2011-12-16 16:12 675<font color="#ff000 ... -
开始在这个BLOG里放一部分MapXtreme2004相关代码
2011-12-15 14:38 524MapXtreme2004是嵌入到.NET环境中的地理 ... -
SVG简介及相关工具
2011-12-14 15:47 662<span style="" ... -
Eclipse3.0.0插件安装解决方法
2011-12-14 15:27 718<p class="MsoNorma ... -
Java反编译工具――Jode
2011-12-13 11:49 745</span> </span> ...
相关推荐
<param-value>classpath:spring/app.xml,classpath:org/codehaus/xfire/spring/xfire.xml</param-value> </context-param> <!--配置xfire ws--> <servlet-name>XFireServlet</servlet-name> ...
WebService应用中 Xfire使用说明文档
eclipse下spring+xfire实现ws-security的简单例子,包含服务器和客户端的代码,实现用户名/密码.数字签名和报文加密的安全认证,唯一不足的是没有实现数字签名和报文加密的混合模式(可能是密匙文件的问题,正在努力中),...
xfire+spring+安全认证,包含服务端和客户端,xfire jar包可以从我的资源下面下或网上很多。
用java通过xfire框架实现ws,实现正向生成wsdl文件,并由wsdl逆向生成java ws客户端代码 测试输入:http://localhost:8080/webservice-xfire/services/CalculatorService?wsdl
xfire 使用外部类、返回collection及输入数组参数示例
使用xfire框架搭建的webService。主要有2个实例:SOAP Header中进行身份验证和WS-Security进行身份验证
在 MyEclipse 上使用 XFire 编写 Web Service.rar在 MyEclipse 上使用 XFire 编写 Web Service.rar在 MyEclipse 上使用 XFire 编写 Web Service
"Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...
本例子使用XFire发布WebService+XFire调用WebService-示例
2、db是mysql,名字为test,用户名root,密码空 3、com.morningstar.utility.WSUtility为调用WebService的客户端代码,在调用这个WebService返回数据时存在一点问题。希望有人能帮我解决下,指点下我,小弟不胜感激。...
NULL 博文链接:https://wander312.iteye.com/blog/1180698
xfire 1.26 博文链接:https://qgl.iteye.com/blog/119726
4. 安全可靠:xfire提供了一个安全的WebService开发环境,支持SSL/TLS加密、身份验证和授权等功能。 xfire的应用场景包括: 1. 企业应用集成:xfire可以用于企业应用集成,实现不同系统之间的数据交换和集成。 2. ...
xfire客户端生成自动生成java代码调用
xfire 的学习笔记,包括如何生成webservice客户端代码,如何集成spring框架以及常见异常的处理
commons-httpclient-3.1.jar,xfire客户端使用需包2
xfire-all-1.2.6 xfire所需的全部包
XFire 安装,用于MyEclipse中安装XFire插件,eclipse中也适用
XFire--Webservice入门xfire