WebService学习笔记-CXF添加自定义拦截器
2016-02-04 11:03
453 查看
使用自定义拦截器实现用户名和密码的校验
客户端:出拦截器
服务器:入拦截器
客户端
AddUserInterceptor.java
[code=java;toolbar:false">package com.demo.interceptors;
import java.util.List;
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.apache.xml.utils.DOMHelper;//使用xalan-2.7.1.jar
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String username;
private String password;
public AddUserInterceptor(String username, String password) {
super(Phase.PRE_PROTOCOL);// 准备协议化时拦截
this.username = username;
this.password = password;
}
/*
* 消息格式
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<atguigu>
<username>umgsai</username>
<password>123456</password>
</atguigu>
</soap:Header>
<soap:Body>
<ns1:sayHi xmlns:ns1="http://demo.com/">
<text>test~~~</text>
</ns1:sayHi>
</soap:Body>
</soap:Envelope>
*
* */
@Override
public void handleMessage(SoapMessage message) throws Fault {
List<Header> headers = message.getHeaders();
Document document = DOMHelper.createDocument();
Element rootElement = document.createElement("atguigu");
Element usernameElement = document.createElement("username");
usernameElement.setTextContent(username);
rootElement.appendChild(usernameElement);
Element passwordElement = document.createElement("password");
passwordElement.setTextContent(password);
rootElement.appendChild(passwordElement);
headers.add(new Header(new QName("atguigu"), rootElement));
System.out.println("拦截...");
}
}package com.demo.interceptors;
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;
//检查用户的 拦截器
public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public CheckUserInterceptor() {
super(Phase.PRE_PROTOCOL);// 准备协议化时拦截
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
Header header = message.getHeader(new QName("atguigu"));
if (header != null) {
Element element = (Element) header.getObject();
String username = element.getElementsByTagName("username").item(0).getTextContent();
String password = element.getElementsByTagName("password").item(0).getTextContent();
if (username.equals("umgsai")&&password.equals("123456")) {
System.out.println("通过拦截器...");
return;
}
}
//不能通过
System.out.println("没有通过拦截器");
throw new Fault(new RuntimeException("用户名或密码不正确"));
}
}
客户端:出拦截器
服务器:入拦截器
客户端
AddUserInterceptor.java
[code=java;toolbar:false">package com.demo.interceptors;
import java.util.List;
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.apache.xml.utils.DOMHelper;//使用xalan-2.7.1.jar
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String username;
private String password;
public AddUserInterceptor(String username, String password) {
super(Phase.PRE_PROTOCOL);// 准备协议化时拦截
this.username = username;
this.password = password;
}
/*
* 消息格式
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<atguigu>
<username>umgsai</username>
<password>123456</password>
</atguigu>
</soap:Header>
<soap:Body>
<ns1:sayHi xmlns:ns1="http://demo.com/">
<text>test~~~</text>
</ns1:sayHi>
</soap:Body>
</soap:Envelope>
*
* */
@Override
public void handleMessage(SoapMessage message) throws Fault {
List<Header> headers = message.getHeaders();
Document document = DOMHelper.createDocument();
Element rootElement = document.createElement("atguigu");
Element usernameElement = document.createElement("username");
usernameElement.setTextContent(username);
rootElement.appendChild(usernameElement);
Element passwordElement = document.createElement("password");
passwordElement.setTextContent(password);
rootElement.appendChild(passwordElement);
headers.add(new Header(new QName("atguigu"), rootElement));
System.out.println("拦截...");
}
}package com.demo.interceptors;
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;
//检查用户的 拦截器
public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public CheckUserInterceptor() {
super(Phase.PRE_PROTOCOL);// 准备协议化时拦截
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
Header header = message.getHeader(new QName("atguigu"));
if (header != null) {
Element element = (Element) header.getObject();
String username = element.getElementsByTagName("username").item(0).getTextContent();
String password = element.getElementsByTagName("password").item(0).getTextContent();
if (username.equals("umgsai")&&password.equals("123456")) {
System.out.println("通过拦截器...");
return;
}
}
//不能通过
System.out.println("没有通过拦截器");
throw new Fault(new RuntimeException("用户名或密码不正确"));
}
}
相关文章推荐
- WebService学习笔记-CXF添加拦截器
- WebService学习笔记-CXF支持的数据类型
- WebService学习笔记-WSDL文档分析
- WebService学习笔记-使用CXF发布Webservice
- WebService学习笔记-读取webxml.com.cn的天气服务信息
- WebService学习笔记-Hello world
- WebService学习笔记-XML&Schema&HTTP
- Ajax学习笔记-三级联动
- Ajax学习笔记-购物车
- Ajax学习笔记-验证用户名是否可用
- Ajax学习笔记-JQuery中的Ajax
- Ajax学习笔记-Ajax数据格式
- Ajax学习笔记-入门笔记
- Mybatis学习笔记-Mybatis与Spring的整合
- Mybatis学习笔记-一级缓存与二级缓存
- Mybatis学习笔记-调用存储过程
- WebService基础入门(转)
- Mybatis学习笔记-动态SQL与模糊查询
- App服务端通信安全
- Mybatis学习笔记-一对一关联