registerBeanDefinitionParser(new QName(NAMESPACE, VelocityErrorHandlerBeanDefinitionParser.ELEMENT_NAME),
new VelocityErrorHandlerBeanDefinitionParser());
+
+ registerBeanDefinitionParser(SAMLMetadataHandlerBeanDefinitionParser.SCHEMA_TYPE,
+ new SAMLMetadataHandlerBeanDefinitionParser());
registerBeanDefinitionParser(ShibbolethSSOProfileHandlerBeanDefinitionParser.SCHEMA_TYPE,
new ShibbolethSSOProfileHandlerBeanDefinitionParser());
registerBeanDefinitionParser(UsernamePasswordLoginHandlerBeanDefinitionParser.SCHEMA_TYPE,
new UsernamePasswordLoginHandlerBeanDefinitionParser());
-
+
registerBeanDefinitionParser(IPAddressLoginHandlerBeanDefinitionParser.SCHEMA_TYPE,
new IPAddressLoginHandlerBeanDefinitionParser());
}
/*
- * Copyright [2007] [University Corporation for Advanced Internet Development, Inc.]
+ * Copyright 2007 University Corporation for Advanced Internet Development, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import edu.internet2.middleware.shibboleth.common.config.profile.AbstractRequestURIMappedProfileHandlerBeanDefinitionParser;
import edu.internet2.middleware.shibboleth.idp.profile.SAMLMetadataProfileHandler;
-/**
- * Spring bean definition parser for {@link SAMLMetadataProfileHandler}s.
- */
+/** Spring bean definition parser for {@link SAMLMetadataProfileHandler}s. */
public class SAMLMetadataHandlerBeanDefinitionParser extends AbstractRequestURIMappedProfileHandlerBeanDefinitionParser {
/** Schema type. */
/** {@inheritDoc} */
protected void doParse(Element config, BeanDefinitionBuilder builder) {
- builder.addConstructorArg(config.getAttributeNS(null, "metadataFile"));
+ super.doParse(config, builder);
+
+ builder.addConstructorArgValue(config.getAttributeNS(null, "metadataFile"));
+ builder.addConstructorArgReference(config.getAttributeNS(null, "parserPoolRef"));
}
/** {@inheritDoc} */
/*
- * Copyright [2007] [University Corporation for Advanced Internet Development, Inc.]
+ * Copyright 2007 University Corporation for Advanced Internet Development, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package edu.internet2.middleware.shibboleth.idp.profile;
-import java.io.File;
import java.io.OutputStreamWriter;
-import javax.servlet.http.HttpServletRequestWrapper;
-
import org.opensaml.Configuration;
-import org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider;
-import org.opensaml.saml2.metadata.provider.MetadataProviderException;
+import org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider;
+import org.opensaml.util.resource.FilesystemResource;
import org.opensaml.ws.transport.InTransport;
import org.opensaml.ws.transport.OutTransport;
+import org.opensaml.ws.transport.http.HttpServletRequestAdapter;
import org.opensaml.xml.XMLObject;
import org.opensaml.xml.io.Marshaller;
+import org.opensaml.xml.parse.ParserPool;
+import org.opensaml.xml.util.DatatypeHelper;
import org.opensaml.xml.util.XMLHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final Logger log = LoggerFactory.getLogger(SAMLMetadataProfileHandler.class);
/** Metadata provider. */
- private FilesystemMetadataProvider metadataProvider;
+ private ResourceBackedMetadataProvider metadataProvider;
/**
* Constructor.
*
* @param metadataFile the IdPs metadata file
+ * @param pool pool of XML parsers used to parse the metadata
*/
- public SAMLMetadataProfileHandler(String metadataFile) {
+ public SAMLMetadataProfileHandler(String metadataFile, ParserPool pool) {
try {
- metadataProvider = new FilesystemMetadataProvider(new File(metadataFile));
- } catch (MetadataProviderException e) {
+ metadataProvider = new ResourceBackedMetadataProvider(new FilesystemResource(metadataFile));
+ metadataProvider.setParserPool(pool);
+ metadataProvider.setMaintainExpiredMetadata(true);
+ metadataProvider.initialize();
+ } catch (Exception e) {
log.error("Unable to read metadata file " + metadataFile, e);
}
}
XMLObject metadata;
try {
- String requestedEntity = ((HttpServletRequestWrapper) in).getParameter("entity");
- if (requestedEntity == null) {
+ String requestedEntity = DatatypeHelper.safeTrimOrNullString(((HttpServletRequestAdapter) in)
+ .getParameterValue("entity"));
+ if (requestedEntity != null) {
metadata = metadataProvider.getEntityDescriptor(requestedEntity);
} else {
metadata = metadataProvider.getMetadata();
}
- Marshaller marshaller = Configuration.getMarshallerFactory().getMarshaller(metadata);
- XMLHelper.writeNode(marshaller.marshall(metadata), new OutputStreamWriter(out.getOutgoingStream()));
+ if (metadata != null) {
+ Marshaller marshaller = Configuration.getMarshallerFactory().getMarshaller(metadata);
+ XMLHelper.writeNode(marshaller.marshall(metadata), new OutputStreamWriter(out.getOutgoingStream()));
+ }
} catch (Exception e) {
log.error("Unable to retrieve and return metadata", e);
throw new ProfileException(e);
<xsd:documentation>Location of the static IdP metadata file.</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
+ <xsd:attribute name="parserPoolRef" type="xsd:string" default="shibboleth.ParserPool">
+ <xsd:annotation>
+ <xsd:documentation>Reference to the parser pool used to parse the metadata.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:attribute name="servletPath" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
- Optional servlet path to which the browser may be redirected.
+ DEPRECATED. Optional servlet path to which the browser may be redirected.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="supportsPassiveAuthentication" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>
- Whether this login handler, when redirecting to a servlet, support passives authentication.
+ DEPRECATED. Whether this login handler, when redirecting to a servlet, support passives authentication.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>