/** * XFire的回调的Handler,在XFire配置文件中配置 * Server端的认证模块,回调处理模块 * * ClientAuthHandler跟AuthenticationHandler要一起用,或者都不用 * * @author david.turing * @blog openssl.blogjava.net * */ 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://service.webservice.plugins.bookstore.springside.org");
if(message.getHeader()==null) { throw new XFireFault("GetRelation Service Should be Authenticated", XFireFault.SENDER); }
Element token = message.getHeader().getChild("AuthenticationToken", TOKEN_NS); if (token == null) { throw new XFireFault("Request must include authentication token.", XFireFault.SENDER); }
public void setUsername(String username) { this.username = username; }
public void setPassword(String password) { this.password = password; }
public void invoke(MessageContext context) throws Exception {
/******************************************* * Soap Header方式 * 从Soap Header中获取用户名密码 *******************************************/ final Namespace ns = Namespace.getNamespace("SpringSide","http://service.webservice.plugins.bookstore.springside.org"); Element el = new Element("header",ns);
Element auth = new Element("AuthenticationToken", ns); Element username_el = new Element("Username",ns); username_el.addContent(username); Element password_el = new Element("Password",ns); password_el.addContent(password); auth.addContent(username_el); auth.addContent(password_el); el.addContent(auth); context.getCurrentMessage().setHeader(el); log.info("ClientAuthHandler done!"); } }