【问题标题】:SAML LogoutRequest to xml representationSAML LogoutRequest 到 xml 表示
【发布时间】:2014-10-13 13:18:13
【问题描述】:

我这样形成LogoutRequest

我初始化NameID

NameID nameId = buildSAMLObjectWithDefaultName(NameID.class);
nameId.setFormat("urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");
nameId.setValue("xxxxxx");
String sessionIndex = "idxxxx";     
LogoutRequest logoutRequest = genererateLogoutRequest(nameId, sessionIndex, metaData);

方法generateLogoutRequest

private static LogoutRequest genererateLogoutRequest(final NameID nameId,
        final String sessionIndex, final SAMLMetaData metaData)
        throws Exception {
    LogoutRequest logoutRequest = buildSAMLObjectWithDefaultName(LogoutRequest.class);

    logoutRequest.setID("SOME RANDOM ID");

    logoutRequest.setDestination("xxxxxxx/sso/saml");
    logoutRequest.setIssueInstant(new DateTime());

    Issuer issuer = buildSAMLObjectWithDefaultName(Issuer.class);
    issuer.setValue("xxxxx");
    logoutRequest.setIssuer(issuer);

    SessionIndex sessionIndexElement = buildSAMLObjectWithDefaultName(SessionIndex.class);

    sessionIndexElement.setSessionIndex(sessionIndex);
    logoutRequest.getSessionIndexes().add(sessionIndexElement);

    logoutRequest.setNameID(nameId);
    return logoutRequest;
}

在哪里buildSAMLObjectWithDefaultName

public static <T> T buildSAMLObjectWithDefaultName(final Class<T> clazz)
        throws IllegalArgumentException, IllegalAccessException,
        NoSuchFieldException, SecurityException {
    XMLObjectBuilderFactory builderFactory = Configuration
            .getBuilderFactory();

    QName defaultElementName = (QName) clazz.getDeclaredField(
            "DEFAULT_ELEMENT_NAME").get(null);
    T object = (T) builderFactory.getBuilder(defaultElementName)
            .buildObject(defaultElementName);

    return object;
}

但是如何在控制台中显示LogoutRequestxml 表示? 当我喜欢这个时

System.out.println(logoutRequest.getDOM().toString());

它抛出NullPointerException

【问题讨论】:

    标签: java opensaml


    【解决方案1】:

    我用过这个工具

    Marshaller marshaller = org.opensaml.Configuration
                .getMarshallerFactory().getMarshaller(logoutRequest);
    org.w3c.dom.Element authDOM = marshaller.marshall(logoutRequest);
    StringWriter rspWrt = new StringWriter();
    XMLHelper.writeNode(authDOM, rspWrt);
    System.out.println(rspWrt.toString());
    

    【讨论】:

      猜你喜欢
      • 2012-12-04
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多