WebService学习笔记-添加拦截器到基于Spring的Webservice
2016-02-04 11:03
555 查看
服务器端目录结构如图。在上一篇博文中的项目的基础上添加了一个interceptor类。
CheckUserInterceptor.java拦截器
[code=java;toolbar:false">package com.umgsai.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("用户名或密码不正确"));
}
}package com.umgsai.ws.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;
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;
System.out.println("创建AddUserInterceptor实例...");
}
/*
*
<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("拦截...");
}
}
CheckUserInterceptor.java拦截器
[code=java;toolbar:false">package com.umgsai.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("用户名或密码不正确"));
}
}package com.umgsai.ws.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;
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;
System.out.println("创建AddUserInterceptor实例...");
}
/*
*
<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("拦截...");
}
}
相关文章推荐
- WebService学习笔记-使用CXF编写基于Spring的Webservice
- Mybatis学习笔记-Mybatis与Spring的整合
- java Map集合框架之HashMap
- Spring4学习笔记-Spring4整合Hibernate4
- Spring4学习笔记-Spring4整合Struts2(基于配置文件的方式)
- Spring4学习笔记-声明式事务(基于配置文件的方式)
- Spring4学习笔记-声明式事务(基于注解的方式)
- Spring4学习笔记-JDBC
- Spring4学习笔记-AOP(基于配置文件的方式)
- Spring4学习笔记-AOP(基于注解的方式)
- Spring4学习笔记-AOP前传之动态代理
- Spring4学习笔记-泛型依赖注入
- Spring4学习笔记
- Java对象与xml文件互转
- Java读取接口数据并保存到数据库
- Java高级应用
- Java算法 从一个数组中随机选择一部分数
- Spring应用
- Java读取GIS服务器数据
- 初识Java Webservice项目