java webservice(二)

来源:互联网 发布:二手车统一发票软件 编辑:程序博客网 时间:2024/05/19 17:07
继(一)后,利用soapHead验证身份:package test;import java.util.ArrayList;import javax.jws.HandlerChain;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import javax.xml.ws.Endpoint;@WebService(name="hw", serviceName="hwService", targetNamespace="test")@SOAPBinding(style=Style.RPC)@HandlerChain(file="auth-handlers.xml")public class HelloWorld {    @WebMethod(operationName="say")    @WebResult(name="result")    public String say(@WebParam(name="world") String world) {                return "hello" + world;    }        /**     * @param args     */    public static void main(String[] args) {        Endpoint.publish("http://localhost:9000/helloWorld", new HelloWorld());    }} 

package test;import java.util.Iterator;import java.util.Set;import javax.xml.namespace.QName;import javax.xml.soap.Node;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPConstants;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPFault;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPMessage;import javax.xml.ws.handler.MessageContext;import javax.xml.ws.handler.soap.SOAPHandler;import javax.xml.ws.handler.soap.SOAPMessageContext;import javax.xml.ws.soap.SOAPFaultException;public class AuthHandler implements SOAPHandler<SOAPMessageContext>{    @Override    public Set<QName> getHeaders() {        return null;    }    @Override    public void close(MessageContext context) {    }        public boolean handleMessage(SOAPMessageContext context) {        // 一次请求会进入这个方法两次, 一次进来前处理,一次返回前处理        boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);        if (!isRequest) {            try {                SOAPMessage soapMsg = context.getMessage();                soapMsg.writeTo(System.out);                System.out.println();                                SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();                SOAPHeader soapHeader = soapEnv.getHeader();                if (soapHeader == null) {                    soapHeader = soapEnv.addHeader();                    generateSOAPErrMessage(soapMsg, "No SOAP header.");                }                                Iterator<?> it = soapHeader.extractHeaderElements(SOAPConstants.URI_SOAP_ACTOR_NEXT);                if (it == null || !it.hasNext()) {                    generateSOAPErrMessage(soapMsg, "No header block for next actor.");                }                                while (it.hasNext()) {                    Node node = (Node) it.next();                    if ("auth".equals(node.getNodeName()) && "admin".equals(node.getValue()))                        return true;                }                generateSOAPErrMessage(soapMsg, "invalid user");            } catch (Exception e) {                e.printStackTrace();            }        }        return false;    }        private void generateSOAPErrMessage(SOAPMessage msg, String reason) throws SOAPException {        SOAPBody soapBody = msg.getSOAPPart().getEnvelope().getBody();        SOAPFault soapFault = soapBody.addFault();        soapFault.setFaultString(reason);        throw new SOAPFaultException(soapFault);    }        @Override    public boolean handleFault(SOAPMessageContext context) {        return false;    }    }

package test;import java.util.Set;import javax.xml.namespace.QName;import javax.xml.soap.SOAPConstants;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPHeaderElement;import javax.xml.soap.SOAPMessage;import javax.xml.ws.handler.MessageContext;import javax.xml.ws.handler.soap.SOAPHandler;import javax.xml.ws.handler.soap.SOAPMessageContext;public class ClientHandler implements SOAPHandler<SOAPMessageContext>{    @Override    public Set<QName> getHeaders() {        return null;    }    @Override    public void close(MessageContext context) {    }        public boolean handleMessage(SOAPMessageContext context) {        boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);        if (isRequest) {            try {                SOAPMessage soapMsg = context.getMessage();                SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();                SOAPHeader soapHeader = soapEnv.getHeader();                                if (soapHeader == null) {                    soapHeader = soapEnv.addHeader();                }                                QName qName = new QName("http://test", "auth");                SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(qName);                                soapHeaderElement.setActor(SOAPConstants.URI_SOAP_ACTOR_NEXT);                soapHeaderElement.addTextNode("admin");                soapMsg.saveChanges();                                soapMsg.writeTo(System.out);                System.out.println();            } catch (Exception e) {                e.printStackTrace();            }        }        return true;    }        @Override    public boolean handleFault(SOAPMessageContext context) {        return false;    }    }

<?xml version="1.0" encoding="UTF-8"?><handler-chains xmlns="http://java.sun.com/xml/ns/javaee">    <handler-chain>       <handler>           <handler-name>test</handler-name>           <handler-class>test.ClientHandler</handler-class>       </handler>    </handler-chain></handler-chains> 

<?xml version="1.0" encoding="UTF-8"?><handler-chains xmlns="http://java.sun.com/xml/ns/javaee">    <handler-chain>       <handler>           <handler-name>test</handler-name>           <handler-class>test.AuthHandler</handler-class>       </handler>    </handler-chain></handler-chains> 

http://blog.csdn.net/small____fish/article/details/8209896

http://blog.csdn.net/rangqiwei/article/details/19282271

0 0
原创粉丝点击