webservice篇之中级开发(三)

在前篇的webservice篇之中级开发(二)的基础上进行编码,添加拦截器,如你要请求一个方法时,要通过验证,才可以继续访问,这就是拦截器!

上次的简单编码及发布中发不类:

package com.azj.service;
import javax.xml.ws.Endpoint;
public class Te {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8080/fb", new orderSeiImpl());//访问地址自己可以随意谢,后面接接口实现类
System.out.println("发布成功!");
}
}

在打红线的代码改为:

EndpointImpl proxy = (EndpointImpl)Endpoint.publish("http://localhost:8080/wether", new FbImpl());

proxy.getInInterceptors().add(new AuthInterceptor());//自定义拦截器 AuthInterceptor拦截器类

//proxy.getInInterceptors().add(new LoggingInInterceptor());//记录客户端访问的日志
//proxy.getOutInterceptors().add(new LoggingOutInterceptor());//记录服务端输出的日志

服务端拦截器类:

package com.azj.service;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Element;

//AbstractPhaseInterceptor继承Interceptor
public class MessageInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public MessageInterceptor() {
super(Phase.PRE_PROTOCOL);//做好准备工作
}
@Override
public void handleMessage(SoapMessage ms) throws Fault {

Header header = ms.getHeader(new QName("azj"));//获取名为"azj"header的信息
Element el = (Element) header.getObject();//获取对象内容
String name = el.getElementsByTagName("name").item(0).getTextContent();//获取属性名为name的值
String pwd = el.getElementsByTagName("pwd").item(0).getTextContent();//获取属性名为pwd的值
if("admin".equals(name) && "admin".equals(pwd)){//简单验证
System.out.println("验证成功!");
}

}
}

客户端的发布代码中:

package com.azj.client;
public class Te {
public static void main(String[] args) {
OrderSeiImpl od=new OrderSeiImpl();//这里是接口的实现类,对于发布xml文档里的

OderSel proxy = od.getOrderSeiImplPort();//这里是生成的代理类,对于服务端的接口

String name = proxy.getName("azj");

System.out.println(name);
}
}


红色部分改为:

OrderSeiImpl od=new OrderSeiImpl();

OderSel proxy = od.getOrderSeiImplPort();

Client client = ClientProxy.getClient(proxy);
client.getInInterceptors().add(new LoggingInInterceptor());  
client.getOutInterceptors().add(new loginInterceptor("admin","admin")); //给服务端发送的参数验证

//client.getInInterceptors().add(new LoggingInInterceptor());//记录客户端访问的日志 //client.getOutInterceptors().add(new LoggingOutInterceptor());//记录服务端输出的日志

客户端拦截器的编码:

package com.client.oders;


import java.util.List;


import javax.xml.crypto.dom.DOMURIReference;
import javax.xml.namespace.QName;


import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class loginInterceptor extends AbstractPhaseInterceptor<SoapMessage> {


private String name;
private String pwd;

//实现构造,并对name,pwd赋值
public loginInterceptor(String name,String pwd) {
super(Phase.PRE_PROTOCOL);
this.name=name;
this.pwd=pwd;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getPwd() {
return pwd;
}


public void setPwd(String pwd) {
this.pwd = pwd;
}


@Override
public void handleMessage(SoapMessage mes) throws Fault {
//创建Document对象  运用DOMUtils
List<Header> headers = mes.getHeaders();
Document doc = DOMUtils.createDocument();
//创建element对象
Element Element = doc.createElement("azj");
//此处创建的元素应该按照服务器那边的要求
Element nameElement = doc.createElement("name");
nameElement.setTextContent(name);
Element pwdElement = doc.createElement("pwd");
pwdElement.setTextContent(name);

//添加进入标签
Element.appendChild(nameElement);
Element.appendChild(pwdElement);

//增加一个名为azj的header
headers.add(new Header(new QName("azj"), Element));






}


}

这下拦截器就添加成功啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl+C+V程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值