- 浏览: 37271 次
文章分类
- 全部博客 (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 505一般事件 事件 浏 ... -
js性能问题
2012-02-08 13:13 716随着web应用的复杂度日渐提高,JavaScript代 ... -
HTC Touch HD2/LEO/T8585刷机教程 进三色屏
2012-02-07 15:53 1005[size=14px; line-height: 21 ... -
java中的图片处理
2012-02-04 12:44 758附件中的文件包括: 1.图片的压缩 2.处理圆角图片 ... -
freemarker 读取session 值
2012-02-03 08:25 2434<span style="font-f ... -
JAVA操作——获取文件扩展名,去掉文件扩展名
2012-01-31 14:08 2212<p> 昨天收邮件,得知要参加一个产品部的 ... -
Android开发之消息处理机制(二)——消息循环
2012-01-11 14:53 756<h1>Android开发 ... -
学习FlexViewer(一)——事件和框架
2012-01-11 11:44 1174????? 上午做了关于FlexViewer的讲座,项 ... -
如何获得Java项目文件所在的相对路径
2011-12-28 15:08 2250[size=18px;]今天在开发中做一个java项 ... -
rails 上载xls文件
2011-12-21 12:14 1058?<span style="font- ... -
面试字符串处理之单词翻转
2011-12-21 11:34 836<p align="left&quo ... -
一刷网络投票的小程序
2011-12-20 11:44 1204最近看到网上一投 ... -
一位程序员的一个LBS应用的想法
2011-12-20 10:14 673最近状态不佳, ... -
《漫谈设计模式》一书终于出版了
2011-12-19 13:09 871<p class="MsoNor ... -
将DAT格式视频文件转换成ASF和WMV格式视频文件
2011-12-17 15:29 846以*.ASF和*.WMV为后缀名的视频文件,是微软针对 ... -
支持.NET环境的GIS开发工具MapXtreme2004
2011-12-16 16:12 668<font color="#ff000 ... -
开始在这个BLOG里放一部分MapXtreme2004相关代码
2011-12-15 14:38 516MapXtreme2004是嵌入到.NET环境中的地理 ... -
SVG简介及相关工具
2011-12-14 15:47 657<span style="" ... -
Eclipse3.0.0插件安装解决方法
2011-12-14 15:27 712<p class="MsoNorma ... -
Java反编译工具――Jode
2011-12-13 11:49 739</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
本例子使用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
xfire客户端生成自动生成java代码调用
xfire 的学习笔记,包括如何生成webservice客户端代码,如何集成spring框架以及常见异常的处理
java使用XFire调用webService接口
commons-httpclient-3.1.jar,xfire客户端使用需包2
xfire-all-1.2.6 xfire所需的全部包
XFire 安装,用于MyEclipse中安装XFire插件,eclipse中也适用
XFire--Webservice入门xfire
2 使用Stax解释XML,性能有了质的提高。XFire采用Woodstox 作Stax实现; 3 容易上手,可以方便快速地从pojo发布服务; 4 支持Spring、Pico、Plexus、Loom等容器; 5 灵活的Binding机制,包括默认的Aegis,...