XFire的文档做的真是相当的烂,非常不详细,看得匪夷所思,而且和发行的代码版本相当的不匹配,里面的示例根本无法运行,看得真是……相当窝火
公司项目XFire的服务框架我已经做好,这两天就要加入验证功能,而且要和整体权限框架(还没做)相结合
开始想通过HttpSession验证,这样可以很方便的和b/s的权限系统相统一,但实在不知道如何在客户端通过Spring或XFire访问HttpSession,XFire里的文档倒是提到了:
HttpServletRequest request = XFireServletController.getRequest();
HttpServletResponse response = XFireServletController.getResponse();
并且说只要在web.xml里配置XFireSpringServlet就可以,可是按照配了,结果还是不行
注:axis好像是有MessageContext可以很方便的访问到,xfire里也有MessageContext,可是getSession()出来的是null
如果有高手知道如何做还望麻烦告知
此条路不通只好去查XFire的文档关于authentication部分,大概有以下几种方案:
-
HTTP Authentication
-
SOAP Header authentication with JSR181
-
SOAP authentication with handlers
-
WS-Security
其中第一条HTTP Authentication的文档写的相当匪夷所思,文档写到如何在客户端指定用户名和密码
去忘了写服务端应该怎么做,这个username和password该在那里验证呢??我翻遍了文档也没找着
来看第二条SOAP header authentication with JSR181,看起来倒是很简单
但是在Service的代码中每个方法里都要写一个UserToken验证的参数,虽然似乎权限粒度能控制得很细,但是这严重污染了业务逻辑的代码,非常的不优雅,放弃!
public void someOperation(String data, @WebParam(header=true) UserToken token) {
authenticate(token)
}
再看WS-Security,这是webservice的安全标准,但实在太复杂了,并且需要配置Service.xml,我们项目是Java1.5,Service.xml根本就没有写,是自动生成的,我是实在找不到Service.xml该在那配置?只好作罢
现在只剩下SOAP authentication with handlers,根据文档来看这是能够满足我的要求的,不侵入业务逻辑,能够和整体权限系统相结合,并且配置比较简单
把例子里的代码拷过来,发现根本不能用,少了yom这个包,在网上找了很久也没找到,后来发现yom其实就是yet(another) document object model,原来和dom是一回事嘛,用jdom替换,编译通过。
文档里遗漏了很重要的一点,就是关于如何在xfire-servlet里配置,导致很多人看了文档也进行不下去,我查了很久才在老外的一篇blog里找到一点tips,下面是配置:
<!-- WebService base, do not modify it -->
<bean id="webService" class="org.codehaus.xfire.spring.remoting.XFireExporter" abstract="true">
<property name="serviceFactory">
<ref bean="xfire.serviceFactory" />
</property>
<property name="xfire">
<ref bean="xfire" />
</property>
</bean>
<bean id="yourWebService" parent="webService">
<property name="serviceBean">
<ref bean="yourService" />
</property>
<property name="serviceClass">
<value>your.package.YourServiceInterface</value>
</property>
<property name="inHandlers">
<ref bean="authenticationHandler"/>
</property>
</bean>
AuthenticationHandler需要修改一下,其他不用变:
AuthenticationHandler.java
import org.apache.log4j.Logger;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.fault.*;
import org.jdom.*;
public class AuthenticationHandler extends AbstractHandler {
private static final Logger log = Logger.getLogger(AuthenticationHandler.class);
public void invoke(MessageContext context) throws Exception {
log.info("authentication handler is invoked");
if (context.getInMessage().getHeader() == null)
{
throw new XFireFault("Request must include company authentication token.",
XFireFault.SENDER);
}
Element header = context.getInMessage().getHeader();
Element token = header.getChild("AuthenticationToken");
if (token == null)
{
throw new XFireFault("Request must include authentication token.",
XFireFault.SENDER);
}
String username = token.getChild("Username").getText();
String password = token.getChild("Password").getText();
try {
// 现在你已经得到了客户端传来的username和password,那就验证它吧(可以交给acegi来验证)
}
}catch(Exception e) {
log.warn(e);
throw new XFireFault("Authentication Failed.",
XFireFault.SENDER);
}
}
}
客户端代码:
Service serviceModel = new ObjectServiceFactory().create(YourService.class);
YourService service = (YourService) new XFireProxyFactory().create(serviceModel,
"http://localhost:8080/YourProject/service/YourService");
XFireProxy proxy = (XFireProxy)Proxy.getInvocationHandler(service);
Client client = proxy.getClient();
client.addOutHandler(new ClientAuthHandler("jeffrey", "killjava"));
// 执行下面代码会进行验证
service.someOperation();
分享到:
相关推荐
xfire web service调用代码
第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf第十五章 开发XFire Web Service应用22.pdf...
第十五章 开发XFire Web Service应用.pdf第十五章 开发XFire Web Service应用.pdf第十五章 开发XFire Web Service应用.pdf第十五章 开发XFire Web Service应用.pdf
XFire Web service所有包 XFire Web service所有包
8 XFire Web Service 入门.doc
这是我自己经过琢磨在工作中使用了一段时间Web Service后,自己学习Xfire的Web Service后编写的,随后发现Web Service其实就是这样简单。包中油服务器端代码,也有客户端代码,也有一个使用说明。要是你也想学习接触...
MyEclipse 6 Java 开发中文教程第15章 开发XFire Web Service应用.pdf
xfire开发Web Service接口详解,里面包含图片和文字,适合初学web service的
xfire开发web service文档.rar xfire开发web service文档.rar xfire开发web service文档.rar 含说明+步骤图片
一个XFire webservices的例子,包括服务的创建和客户端的调用,另外还写了几个调用远程web服务的例子
在 MyEclipse 上使用 XFire 编写 Web Service.rar在 MyEclipse 上使用 XFire 编写 Web Service.rar在 MyEclipse 上使用 XFire 编写 Web Service
xfire webservice 非常详细的,通俗易懂的讲解了xfire的应用
使用XFire+Spring构建Web Service
XFire Java Web Service
XFire+Web Service 静态List存储实现前后台数据查询 ,新手实现,不喜勿喷,适合新手学习!一是想弄点分数,没分不好学习啊!
XFire 入门 web service.wpsXFire 入门 web service.wpsXFire 入门 web service.wps
eclipse下的使用Xfire开发webservice
xFire发布Web Service,并调用远程服务 ,里面包含xfire相关lib包及配置service.xml配置文件 ,需要先启动xfire 服务端 再启动客户端。main函数启动测试
一个具有服务端、客户端的Java webservice例子,具有对数据库的操作, 用xfire做的。