Version 0.9.2 (current stable release)

Release date: 19th October 2016

This release adds some minor new features:

The following bug fix is included:

Version 0.9.1 (previous stable release)

Release date: 25th April 2016

This release adds a single new feature:

This adds a CRDetectionStage for use in detecting metadata that can trigger the SSPCPP-684 issue in the Shibboleth SP.

Version 0.9.0

Release date: 18th December 2015.

For a complete list of issues addressed in this release, see https://issues.shibboleth.net/jira/issues/?filter=10873

This is a major pre-1.0 feature release.

Highlights

Now using Spring Resources instead of (now deprecated) Shibboleth Resources.

The factory bean classes PrivateKeyFactoryBeanPublicKeyFactoryBeanX509CertificateFactoryBean and X509CertificateChainFactoryBean bundled from the spring-extensions package have significant API improvements. Each factory now takes a "resource" property which is a Spring Resource rather than a Java File. This allows these factories to be used with any kind of Spring resource, including ClassPathResource. Existing configurations will need to change to compensate for this.

Before
<bean class="...X509CertificateFactoryBean">
    <property name="certificateFile">
        <bean class="java.io.File">
            <constructor-arg value="..."/>
        </bean>
    </property>
</bean>
After
<bean class="...X509CertificateFactoryBean">
    <property name="resource">
        <bean class="org.springframework.core.io.FileSystemResource">
            <constructor-arg value="..."/>
        </bean>
    </property>
</bean>

If you were previously setting the input property of one of these factories to a string value representing the path, and relying on the Spring resource loader to convert that into a File object, you may need to change your configuration to explicitly create a FileSystemResource if that is not the default used by the Spring context type in use in your application.

Now uses the JAXP implementation supplied by the JRE, rather than a much older "endorsed" version. This will affect any configurations which depended on Xerces or Xalan specific extensions; re-endorse the implementation of your choice if this is an issue.

All provided stages now implement a new collectionPredicate property. This can be set to a Predicate<Collection<Item<T>>> which will be applied to each collection passed to the stage. If the collectionPredicate returns true, the stage is executed as normal; this is the default. If the collectionPredicate returns false, the stage is skipped. This can be used used to perform lightweight conditional operations such as forming an EntitiesDescriptor from a collection only if the collection contains at least two items. The AtLeastCollectionPredicate class has been added to address this specific use case. Conditional evaluation of a series of stages with the same collectionPredicate can be simplified by use of a CompositeStage.

This release bundles a new version of the Shibboleth spring-extensions package, which provides a new IdentifiableBeanPostProcessor class. If you include an instance of this class in your Spring configuration, you can now default the "id" property on all Shibboleth components from the bean's "id" attribute, simplifying your configuration by removing the usual duplication between these values.

Before
<bean class="..." id="theBean">
    <property name="id" value="theBean"/>
    ...
</bean>
After
<bean class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor"/>
      
<bean class="..." id="theBean">
    ...
</bean>

The ItemSerializer interface is no longer defined over a collection of items, but now (less surprisingly) operates on a single item. A new ItemCollectionSerializer interface (with a serializeCollection method) takes its place in operating on collections of items. In addition, ItemSerializer and ItemCollectionSerializer implementations are no longer responsible for closing the OutputStream they write the serialized form of their input to. These changes allow reuse of serializer implementations in cases other than the current SerializationStage. The SerializationStage implementation now accepts an ItemCollectionSerializer rather than an ItemSerializer, but DOMElementSerializer has been changed to support both interfaces so that no changes to configurations should be required.

The SetValidUntilStage and SetCacheDurationStage duration setters are now marked using an annotation to indicate that they take non-negative duration values. If you provide an appropriate converter in your Spring configuration, this means that configurations can now use ISO duration values (e.g., "PT6H") rather than a literal number of milliseconds (e.g., "21600000"). For example:

<!-- This bean MUST be called "conversionService" to work properly. -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="net.shibboleth.ext.spring.config.DurationToLongConverter" />
            <bean class="net.shibboleth.ext.spring.config.StringToIPRangeConverter" />
            <bean class="net.shibboleth.ext.spring.config.BooleanToPredicateConverter" />
            <bean class="net.shibboleth.ext.spring.config.StringBooleanToPredicateConverter" />
            <bean class="net.shibboleth.ext.spring.config.StringToResourceConverter" />
        </set>
    </property>
</bean>
    
<bean id="stage" class="net.shibboleth.metadata.dom.saml.SetValidUntilStage"
    p:id="stage"
    p:validityDuration="PT6H"
    init-method="initialize"
    destroy-method="destroy"/>

API Additions

API Changes

API Removals