XFire 中使用 Authentication
来源:互联网 发布:淘宝模特怎么摆姿势 编辑:程序博客网 时间:2024/06/04 17:57
XFire 中使用 Authentication
官方例子http://xfire.codehaus.org/Authentication
Marc Dumontier's Weblog:http://www.jroller.com/hexbinary/date/20051130
1.配置服务端
2.配置客户端
1.配置服务端
1.1.创建ws 接口
接口:
package com.cn.test;
public interface ITest {
public String sayTest(String param);
}
实现类:
package com.cn.test;
public class TestImpl implements ITest{
public String sayTest(String param){
return param+" test !!";
}
}
扩展类:
package com.cn.test;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.fault.XFireFault;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
import org.jdom.Namespace;
public class AuthenticationHandler extends AbstractHandler{
public static final String NS = "http://test.cn.com";
public void invoke(MessageContext context) throws XFireFault {
if(context.getInMessage().getHeader()==null){
throw new XFireFault("must include account",XFireFault.SENDER);
}
Element token = context.getInMessage().getHeader().getChild("AuthenticationToken",Namespace.getNamespace(NS));
if(token==null){
throw new XFireFault("token is null",XFireFault.SENDER);
}
String username = token.getChild("Username",Namespace.getNamespace(NS)).getText();
String password = token.getChild("Password",Namespace.getNamespace(NS)).getText();
try{
if(username.equals("test")){
System.out.println("username is test!!");
}
}catch(Exception e){
throw new XFireFault("Authentication Failed...",XFireFault.SENDER);
}
}
1.2.配置web.xml
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/appContext.xml
</param-value>
</context-param>
<!-- spring framework -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
1.3.配置spring
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
<bean id="testImpl" class="com.cn.test.TestImpl"/>
<bean id="authenticationHandler" class="com.cn.test.AuthenticationHandler"/>
<bean id="test" class="org.codehaus.xfire.spring.ServiceBean">
<property name="serviceBean" ref="testImpl"/>
<property name="serviceClass" value="com.cn.test.ITest"/>
<property name="inHandlers">
<list>
<ref bean="authenticationHandler"/>
</list>
</property>
</bean>
</beans>
服务端配置完毕。主要是在inHandlers 加入authenticationHandler 验证帐号密码
2.客户端
扩展AbstractHandler,OutHandler
package test;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
import org.jdom.Namespace;
public class ClientAuthenticationHandler extends AbstractHandler{
private String username = null;
private String password = null;
public ClientAuthenticationHandler() {
}
public ClientAuthenticationHandler(String username,String password) {
this.username = username;
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void invoke(MessageContext context) throws Exception {
final Namespace ns = Namespace.getNamespace("http://test.cn.com");
Element el = new Element("header",ns);
context.getOutMessage().setHeader(el);
Element auth = new Element("AuthenticationToken", ns);
Element username_el = new Element("Username",ns);
username_el.addContent(username);
Element password_el = new Element("Password",ns);
password_el.addContent(password);
auth.addContent(username_el);
auth.addContent(password_el);
el.addContent(auth);
}
测试类:
package test;
import java.net.URL;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.Channel;
public class TestMain {
public static void main(String[] args) throws Exception{
Client client = new Client(new URL("http://127.0.0.1:8080/asxf/services/ITest?wsdl"));
client.addOutHandler(new ClientAuthenticationHandler("test","test"));
Object[] results = client.invoke("sayTest", new Object[] {"test invoke"});
System.out.println(results[0]);
}
需要主要的是Namespace.getNamespace("http://test.cn.com"),服务端和客户端要一致
这个参考wsdl里面的targetNamespace="http://test.cn.com"
- XFire 中使用 Authentication
- JAVA中使用XFire调用WebService接口
- JAVA中使用XFire调用WebService接口
- 在java中使用xfire实现webservice的配置
- webservice使用XFire中request.getInputStream不能多次读取
- 在 xfire中使用 GZip来 压缩 传输量
- 关于使用XFire...
- 使用xfire建立webservice
- XFire 使用入门
- 使用XFire开发WebService
- XFire简单使用
- XFire简介及使用
- WebService XFire 使用
- 使用xfire发布WebService
- XFire的使用
- 使用XFire开发WebService
- 使用XFire开发WebService
- XFire WebService使用实例
- 加了注解的燃尽图可以帮助回顾
- Intel开发手册索取记(1)
- FTP中主动模式(port)与被动模式(PASV) (转载)
- fatal error LNK1169: 找到一个或多个多重定义的符号
- asp.net和Flash结合实现文件上传
- XFire 中使用 Authentication
- 利用PCI DSS保护支付卡数据
- 禁用USB设备
- sql优化代码
- DirectSound应用程序开发快速入门
- SSH 整合
- NLB是如何做负载分流计算的
- 编译android的linux内核
- C#使用委托