но я застрял в том, что делать после удаления фильтра генератора метаданных.
ользую WSO2 и SSOCircle с расширением Spring-SAML. В настоящее время мы тестируем конфигурации и определили 2 IdP и 2 SP в нашем applicationContext. Итак, в настоящее время у нас есть 2 статически определенных IdP в нашей весенней конфигурации xml, и это работает. Для целей тестирования мы используем комбинацию CachingMetadataManager и ResourceBackedMetadataProvider, поэтому метаданные IdP встроены в наш WAR-архив. Образец:
<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg>
<list>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
<constructor-arg>
<bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
<constructor-arg>
<bean class="java.util.Timer"/>
</constructor-arg>
<constructor-arg>
<bean class="org.opensaml.util.resource.ClasspathResource">
<c,onstructor-arg value="/metadata/wso2idp_metadata.xml"/>
</bean>
</constructor-arg>
<property name="parserPool" ref="parserPool"/>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
</bean>
</constructor-arg>
</bean>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
<constructor-arg>
<bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
<constructor-arg>
<bean class="java.util.Timer"/>
</constructor-arg>
<constructor-arg>
<bean class="org.opensaml.util.resource.ClasspathResource">
<constructor-arg value="/metadata/ssocircleidp_metadata.xml"/>
</bean>
</constructor-arg>
<property name="parserPool" ref="parserPool"/>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
</bean>
</constructor-arg>
</bean>
</list>
</constructor-arg>
Для производства мы хотим иметь возможность хранить наши метаданные IdP в базе данных (расположенной в центре). Я хочу иметь возможность добавлять, удалять и изменять метаданные без повторного развертывания WAR или перезапуска сервера (ов). Первоначально я думал, что мог бы переопределить CachingMetadataManager и определить конструктор noarg, который мог бы динамически загружать все поставщики метаданных, но это невозможно, потому что CachingMetadataManager определяет только один конструктор, который должен принимать в списке MetadataProvider. Я закончил тем, что сделал следующее:
<bean id="metadataList" class="org.arbfile.util.security.saml.DBMetadataProviderList">
<constructor-arg ref="parserPool" />
<constructor-arg>
<bean class="java.util.Timer"/>
</constructor-arg>
</bean>
<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg ref="metadataList" />
</bean>
Bean metadataList может быть определен просто как:
public final class DBMetadataProviderList extends ArrayList<MetadataProvider>
{
private final static Logger log = LoggerFactory.getLogger(DBMetadataProviderList.class);
private ParserPool parser;
public DBMetadataProviderList(ParserPool _parser, Timer _timer) throws MetadataProviderException
{
this.parser = _parser;
// Lookup metadata from DB
}
}
Это позволяет мне динамически читать метаданные IdP. Моя логика падает, когда дело доходит до обновления хотя. я нашелэтот пост на весеннем форумеОднако ему от 3 до 4 лет. Каков наилучший способ динамически читать, добавлять и обновлять метаданные IdP, кэшировать их и обновлять кэш через некоторый интервал? В моем случае 1 строка в таблице БД будет соответствовать одному определению метаданных IdP.