Java CXF WebService框架 集成Spring3 自定义拦截器进行头验证
来源:互联网 发布:cutecom串口发送数据 编辑:程序博客网 时间:2024/05/22 06:06
CXF框架的拦截器特性,我们通过CXF拦截器特性实现Header验证。CXF版本: cxf-2.7.15 服务器端案例代码:HeaderAuthInterceptor.java cxf-ws.xml 客户端代码案例:ClientAuthInterceptor.java CxfClient.java SOAP消息格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package
com.what21.cxf.interceptor;
import
javax.xml.soap.SOAPException;
import
javax.xml.soap.SOAPHeader;
import
javax.xml.soap.SOAPMessage;
import
org.apache.cxf.binding.soap.SoapMessage;
import
org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import
org.apache.cxf.interceptor.Fault;
import
org.apache.cxf.phase.AbstractPhaseInterceptor;
import
org.apache.cxf.phase.Phase;
import
org.w3c.dom.Node;
import
org.w3c.dom.NodeList;
public
class
HeaderAuthInterceptor
extends
AbstractPhaseInterceptor<SoapMessage> {
private
SAAJInInterceptor saa =
new
SAAJInInterceptor();
public
HeaderAuthInterceptor() {
super
(Phase.PRE_PROTOCOL);
getAfter().add(SAAJInInterceptor.
class
.getName());
}
public
void
handleMessage(SoapMessage message)
throws
Fault {
SOAPMessage soapMsg = message.getContent(SOAPMessage.
class
);
if
(soapMsg ==
null
){
saa.handleMessage(message);
soapMsg = message.getContent(SOAPMessage.
class
);
}
SOAPHeader header =
null
;
try
{
header = soapMsg.getSOAPHeader();
NodeList userNodes = header.getElementsByTagName(
"username"
);
NodeList passNodes = header.getElementsByTagName(
"password"
);
if
(userNodes!=
null
&& passNodes!=
null
){
Node userNode = userNodes.item(
0
);
Node passNode = passNodes.item(
0
);
String username = userNode.getTextContent();
String password = passNode.getTextContent();
System.out.println(
"username : "
+ username +
",password : "
+ password);
return
;
}
}
catch
(SOAPException e) {
e.printStackTrace();
}
throw
new
Fault(
new
Exception(
"auth error."
));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<beans xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws=
"http://cxf.apache.org/jaxws"
xsi:schemaLocation="http:
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans.xsd
http:
//cxf.apache.org/jaxws
http:
//cxf.apache.org/schemas/jaxws.xsd">
<!-- webservice bean -->
<bean id=
"helloService"
class
=
"com.what21.cxf.spring.HelloService"
/>
<!-- 集成配置 -->
<
import
resource=
"classpath:META-INF/cxf/cxf.xml"
/>
<
import
resource=
"classpath:META-INF/cxf/cxf-extension-soap.xml"
/>
<
import
resource=
"classpath:META-INF/cxf/cxf-servlet.xml"
/>
<jaxws:endpoint id=
"ws"
implementor=
"#helloService"
address=
"/helloService"
>
<jaxws:features>
<!-- 日志拦截器 -->
<bean
class
=
"org.apache.cxf.feature.LoggingFeature"
/>
</jaxws:features>
<jaxws:inInterceptors>
<!-- 自定义拦截器 -->
<bean
class
=
"com.what21.cxf.interceptor.HeaderAuthInterceptor"
/>
</jaxws:inInterceptors>
</jaxws:endpoint>
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package
com.what21.cxf.interceptor;
import
java.util.List;
import
javax.xml.namespace.QName;
import
org.apache.cxf.binding.soap.SoapHeader;
import
org.apache.cxf.binding.soap.SoapMessage;
import
org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import
org.apache.cxf.headers.Header;
import
org.apache.cxf.helpers.DOMUtils;
import
org.apache.cxf.interceptor.Fault;
import
org.apache.cxf.phase.Phase;
import
org.w3c.dom.Document;
import
org.w3c.dom.Element;
public
class
ClientAuthInterceptor
extends
AbstractSoapInterceptor{
public
ClientAuthInterceptor(){
super
(Phase.WRITE);
}
public
void
handleMessage(SoapMessage soapMessage)
throws
Fault {
Document doc=DOMUtils.createDocument();
// 根节点
Element rootEle=doc.createElementNS(
""
,
"AuthToken"
);
// 用户ID
Element userEle = doc.createElement(
"username"
);
userEle.setTextContent(
"username"
);
rootEle.appendChild(userEle);
// 密码
Element passEle = doc.createElement(
"password"
);
passEle.setTextContent(
"password"
);
rootEle.appendChild(passEle);
// 添加到头
List<Header> headers = soapMessage.getHeaders();
QName qname=
new
QName(
"AuthToken"
);
SoapHeader head=
new
SoapHeader(qname, rootEle);
headers.add(head);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package
com.what21.cxf.interceptor;
import
org.apache.cxf.interceptor.LoggingInInterceptor;
import
org.apache.cxf.interceptor.LoggingOutInterceptor;
import
org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import
com.what21.cxf.spring.IHello;
public
class
CxfClient {
/**
* @param args
*/
public
static
void
main(String[] args) {
JaxWsProxyFactoryBean soapFactoryBean =
new
JaxWsProxyFactoryBean();
soapFactoryBean.setAddress(
"http://127.0.0.1:8080/cxf/helloService"
);
soapFactoryBean.getInInterceptors().add(
new
LoggingInInterceptor());
soapFactoryBean.getOutInterceptors().add(
new
LoggingOutInterceptor());
// 添加拦截器
soapFactoryBean.getOutInterceptors().add(
new
ClientAuthInterceptor());
soapFactoryBean.setServiceClass(IHello.
class
);
Object o = soapFactoryBean.create();
IHello helloService = (IHello)o;
String result =
null
;
try
{
result = helloService.message(
"i am client!"
);
}
catch
(Exception e) {
e.printStackTrace();
}
System.out.println(result);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
<soap:Envelope xmlns:soap=
"http://schemas.xmlsoap.org/soap/envelope/"
>
<soap:Header>
<AuthToken>
<username>username</username>
<password>password</password>
</AuthToken>
</soap:Header>
<soap:Body>
<ns2:message xmlns:ns2=
"http://spring.cxf.what21.com/"
>
<arg0>i am client!</arg0>
</ns2:message>
</soap:Body>
</soap:Envelope>
0 0
- Java CXF WebService框架 集成Spring3 自定义拦截器进行头验证
- 【WebService框架-CXF】——CXF+Spring+自定义拦截器构建WebService服务端
- 【WebService框架-CXF】——CXF+Spring+Struts+自定义拦截器构建WebService客户端
- java WebService CXF Spring 自定义拦截器 附实例源码
- WebService 之CXF拦截器,使用 CXF 拦截器进行简单的 head 信息验证,适合入门选手
- webservice利用cxf框架编写日志拦截器和自定义拦截器
- WebService-CXF-Spring+自定义拦截器
- webservice框架CXF拦截器的使用
- 【WebService框架-CXF】——CXF拦截器
- 基于Maven环境进行Spring集成CXF WebService框架
- webservice cxf 拦截器
- CXF-08:自定义CXF拦截器来进行权限控制
- WebService(7)_Apache CXF拦截器-权限管理-登录验证
- webservice使用拦截器进行权限验证
- 【WebService】CXF拦截器的设置以及自定义CXF拦截器
- WebService学习笔记-CXF添加自定义拦截器
- CXF自定义拦截器
- CXF 自定义拦截器
- mysql添加unique约束
- VMware虚拟网络编辑器
- JavaScript变量作用域
- tomcat进行包部署的时候无法访问的问题
- HTTP协议详解
- Java CXF WebService框架 集成Spring3 自定义拦截器进行头验证
- 常用SQL语句总结
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
- 算法马拉松18-A-染色问题
- C/C++ SQLite 之基础篇
- git中的指令
- HDU Free DIY Tour(dp)
- Recursion
- Java中的基本类型和引用类型