⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mexgetservice.java

📁 开源的OpenId的一个java实现
💻 JAVA
字号:
/*                                                                              * Copyright 2005,2006 WSO2, Inc. http://www.wso2.org *                                                                              * Licensed under the Apache License, Version 2.0 (the "License");              * you may not use this file except in compliance with the License.             * You may obtain a copy of the License at                                      *                                                                              *      http://www.apache.org/licenses/LICENSE-2.0                              *                                                                              * Unless required by applicable law or agreed to in writing, software          * distributed under the License is distributed on an "AS IS" BASIS,            * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.     * See the License for the specific language governing permissions and          * limitations under the License.                                               */package org.wso2.solutions.identity.sts.mex;import org.apache.axiom.om.OMElement;import org.apache.axiom.om.OMFactory;import org.apache.axiom.om.OMNamespace;import org.apache.axiom.om.util.Base64;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.AddressingConstants;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.addressing.EndpointReferenceHelper;import org.apache.axis2.context.MessageContext;import org.apache.axis2.mex.om.Metadata;import org.apache.axis2.mex.om.MetadataSection;import org.apache.axis2.namespace.Constants;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.rahas.RahasConstants;import org.wso2.solutions.identity.IdentityConstants;import org.wso2.solutions.identity.IdentityProviderConstants;import org.wso2.solutions.identity.IdentityProviderException;import org.wso2.solutions.identity.sts.KeyUtil;import org.wso2.wsas.admin.service.ServiceAdmin;import javax.xml.crypto.dsig.XMLSignature;import javax.xml.namespace.QName;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class MexGetService {    private static Log log = LogFactory.getLog(MexGetService.class);    private static final String IDENTITY_LN = "Identity";    private static final String KEY_INFO_LN = "KeyInfo";    private static final String X509DATA_LN = "X509Data";    private static final String X509CERT_LN = "X509Certificate";    private static final String WSA_PREFIX = "a"; // workaround for oM bug    public OMElement get(OMElement element) throws AxisFault {        OMElement elem = null;        if (log.isDebugEnabled()) {            log.debug("begin Mex get");        }        MessageContext msgCtx = MessageContext.getCurrentMessageContext();        String service = msgCtx.getAxisService().getName();        ServiceAdmin admin = new ServiceAdmin();        String stsName = null;        if (service.equals(IdentityProviderConstants.SERVICE_NAME_MEX_UT)) {            stsName = IdentityProviderConstants.SERVICE_NAME_STS_UT;        } else if (service                .equals(IdentityProviderConstants.SERVICE_NAME_MEX_IC)) {            stsName = IdentityProviderConstants.SERVICE_NAME_STS_IC;        } else if (service                .equals(IdentityProviderConstants.SERVICE_NAME_MEX_UT_SYMM)) {            stsName = IdentityProviderConstants.SERVICE_NAME_STS_UT_SYMM;        } else if (service                .equals(IdentityProviderConstants.SERVICE_NAME_MEX_IC_SYMM)) {            stsName = IdentityProviderConstants.SERVICE_NAME_STS_IC_SYMM;        } else if (service                .equals(IdentityProviderConstants.OpenId.SERVICE_NAME_MEX_OPENID)) {            stsName = IdentityProviderConstants.OpenId.SERVICE_NAME_STS_OPENID;        } else if (service                .equals(IdentityProviderConstants.OpenId.SERVICE_NAME_MEX_IC_OPENID)) {            stsName = IdentityProviderConstants.OpenId.SERVICE_NAME_STS_IC_OPENID;        } else {            throw new AxisFault("Invalid Mex Service");        }        OMElement retElement = admin.getWSDL(stsName).getFirstElement();        OMElement defElement = retElement.getFirstChildWithName(new QName(                Constants.NS_URI_WSDL11, "definitions"));        setIdentityAddressing(defElement);        MetadataSection section = new MetadataSection();        section.setDialect("http://schemas.xmlsoap.org/wsdl/");        section.setinlineData(defElement);        section.setIdentifier(RahasConstants.WST_NS_05_02);        List lst = new ArrayList();        lst.add(section);                Metadata mdata = new Metadata();        mdata.setMetadatSections(lst);        elem = mdata.toOM();        if (log.isDebugEnabled()) {            log.debug("Mex processing DONE -> RESPONSE : " + elem);        }        return elem;    }    private void setIdentityAddressing(OMElement definitionElement)            throws AxisFault {        if (log.isDebugEnabled()) {            log.debug("setIdentityAddressing");        }        Iterator ite = definitionElement.getChildrenWithName(new QName(                Constants.NS_URI_WSDL11, "service"));        OMElement serviceElem = null;        if (ite.hasNext()) {            serviceElem = (OMElement) ite.next();        } else {            throw new AxisFault("Cannot find element Nampsace :"                    + Constants.NS_URI_WSDL11 + " || Local Name : service");        }        OMFactory factory = definitionElement.getOMFactory();        OMNamespace wsaNs = factory.createOMNamespace(                AddressingConstants.Final.WSA_NAMESPACE, WSA_PREFIX);        definitionElement.declareNamespace(wsaNs);        String value = IdentityProviderConstants.SERVICE_NAME_STS_UT;        X509Certificate cert;        try {            cert = KeyUtil.getCertificateToIncludeInMex(value);        } catch (IdentityProviderException e) {            throw new AxisFault(e.getMessage(), e);        }        if (cert == null) {            throw new AxisFault("STS's certificate is null");        }        Iterator portIte = serviceElem.getChildElements();        while (portIte.hasNext()) {            OMElement portElem = (OMElement) portIte.next();            if ("port".equals(portElem.getLocalName())) {                addIIdentityAddressing(portElem, cert);            }        }    }    /**     * This method adds EndPointReference element into Port element of the WSDL     */    private void addIIdentityAddressing(OMElement portElem, X509Certificate cert)            throws AxisFault {        if (log.isDebugEnabled()) {            log.debug("addIIdentityAddressing - port Element found");        }        try {            Iterator ite = portElem.getChildElements();            String address = null;            while (ite.hasNext()) {                OMElement elem = (OMElement) ite.next();                if ("address".equals(elem.getLocalName())) {                    address = elem.getAttributeValue(new QName("", "location"));                    break; // only one address element                }            }            if (address == null) {                throw new AxisFault("Address inside Port Element is null");            }            EndpointReference ref = new EndpointReference(address);            OMFactory factory = portElem.getOMFactory(); // this is an OM bug            // OMFactory factory = OMAbstractFactory.getOMFactory();            OMElement identityElem = factory.createOMElement(new QName(                    IdentityConstants.IDENTITY_ADDRESSING_NS, IDENTITY_LN));            OMNamespace ns = factory.createOMNamespace(XMLSignature.XMLNS,                    "dsig");            OMElement keyInfoElem = factory.createOMElement(KEY_INFO_LN, ns);            OMElement X509DataElem = factory.createOMElement(X509DATA_LN, ns);            OMElement X509CertElem = factory.createOMElement(X509CERT_LN, ns);            byte[] byteArray = cert.getEncoded();            X509CertElem.setText(Base64.encode(byteArray));            X509DataElem.addChild(X509CertElem);            keyInfoElem.addChild(X509DataElem);            identityElem.addChild(keyInfoElem);            ArrayList lst = new ArrayList();            lst.add(identityElem);            ref.setExtensibleElements(lst);            QName qname = new QName(AddressingConstants.Final.WSA_NAMESPACE,                    "EndpointReference", WSA_PREFIX);            OMElement refElem = EndpointReferenceHelper.toOM(factory, ref,                    qname, AddressingConstants.Final.WSA_NAMESPACE);            portElem.addChild(refElem);        } catch (Exception e) {            throw new AxisFault(e.getMessage(), e);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -