本文是XFire+Spring的结合使用:
xfire_servlet.xml的内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<!-- START SNIPPET: xfire -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/QueryService">
<ref bean="query"/>
</entry>
</map>
</property>
</bean>
<!-- Declare a parent bean with all properties common to both services -->
<bean id="query" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory">
<ref bean="xfire.serviceFactory"/>
</property>
<property name="xfire">
<ref bean="xfire"/>
</property>
<property name="serviceBean">
<ref bean="QueryHibRis"/>
</property>
<property name="serviceClass">
<value>com.spring.Iquery</value>
</property>
<property name="inHandlers">
<ref bean="authenticationHandler"/>
</property>
</bean>
<!-- END SNIPPET: xfire -->
</beans>
applicationContext.xml文件的内容authenticationHandler的定义
<bean id="authenticationHandler" class="com.security.AuthenticationHandler"></bean>
com.security.AuthenticationHandler类的内容:
package com.security;
import org.apache.log4j.Logger;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.exchange.InMessage;
import org.codehaus.xfire.fault.XFireFault;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
import org.jdom.Namespace;
/**
* XFire的回调的Handler,在XFire配置文件中配置
* Server端的认证模块,回调处理模块
*
* ClientAuthHandler跟AuthenticationHandler要一起用,或者都不用
*
*
*
*
*/
public class AuthenticationHandler extends AbstractHandler {
private static final Logger log = Logger
.getLogger(AuthenticationHandler.class);
public void invoke(MessageContext context) throws Exception {
log.info("#AuthenticationHandler is invoked");
InMessage message = context.getInMessage();
final Namespace TOKEN_NS = Namespace.getNamespace("SpringSide",
"http://spring.com");
if (message.getHeader() == null) {
throw new XFireFault("GetRelation Service Should be Authenticated",
XFireFault.SENDER);
}
// System.out.println("dd"+message.getHeader());
Element token = message.getHeader().getChild("AuthenticationToken",
TOKEN_NS);
if (token == null) {
throw new XFireFault("Request must include authentication token.",
XFireFault.SENDER);
}
String username = token.getChild("Username", TOKEN_NS).getValue();
String password = token.getChild("Password", TOKEN_NS).getValue();
if (username == null || password == null)
throw new XFireFault("Supplied Username and Password Please",
XFireFault.SENDER);
/**
/** */
/**
* 检查用户名密码是否正确
*/
if (!username.equals("user") || !password.equals("ddd"))
throw new XFireFault(
" Authentication Fail! Check username/password ",
XFireFault.SENDER);
}
}