У меня проблема со сборкой XML из объекта класса AuthnRequest
. Я не понимаю, почему при загрузке компоновщика builderFactory.getBuilder
я всегда получаю ноль. Я использую код пакета
<dependency>
<groupId>org.springframework.security.extensions</groupId>
<artifactId>spring-security-saml2-core</artifactId>
<version>2.0.0.M31</version>
</dependency>
, который я пытаюсь сгенерировать xml. Во-первых, если я всегда получаю ноль, и я не знаю, где проблема может быть
XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();
if (builderFactory.getBuilder(AuthnRequest.DEFAULT_ELEMENT_NAME) == null) {
System.out.println("NULL");
} else {
System.out.println("Not null");
}
AuthnRequest authnRequest = (AuthnRequest)builderFactory.getBuilder(AuthnRequest.DEFAULT_ELEMENT_NAME).buildObject(AuthnRequest.DEFAULT_ELEMENT_NAME);
authnRequest.setDestination(SSO_SERVICE);
authnRequest.setIssueInstant(new DateTime());
authnRequest.setProtocolBinding(SAMLConstants.SAML2_ARTIFACT_BINDING_URI);
authnRequest.setAssertionConsumerServiceURL(ASSERTION_CONSUMER_SERVICE);
authnRequest.setID("random-string-ID_" + UUID.randomUUID().toString());
authnRequest.setVersion(SAMLVersion.VERSION_20);
Issuer issuer = new IssuerBuilder().buildObject();
issuer.setValue(SP_ENTITY_ID);
authnRequest.setIssuer(issuer);
NameIDPolicy policy = new NameIDPolicyBuilder().buildObject();
policy.setAllowCreate(true);
policy.setFormat(NameIDType.UNSPECIFIED);
authnRequest.setNameIDPolicy(policy);
Signature signature = new SignatureBuilder().buildObject();
//signature.setSigningCredential();
signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
signature.setCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
authnRequest.setSignature(signature);
((SAMLObjectContentReference)signature.getContentReferences().get(0)).setDigestAlgorithm(EncryptionConstants.ALGO_ID_DIGEST_SHA256);
try {
org.opensaml.xml.Configuration.getMarshallerFactory().getMarshaller(AuthnRequest.DEFAULT_ELEMENT_NAME).marshall(authnRequest);
} catch (MarshallingException e) {
throw new RuntimeException(e);
}