2016-08-24 7 views
0

FilesystemMetadataProviderを使用してファイルからIDPメタデータをロードするJava構成を使用するSpring SAMLプロジェクトがあります。私は起動時にデータベースからIDPをロードできるようにしたいと考えています。設定を変更する必要がある場合、変更を読み込むためにアプリを再起動する必要はありません。再読み込みはHTTPMetadataProviderですが、データベース用に1つありますか?これは可能ですか?データベースからIDPをロードするSpring SAML

答えて

0

あなたがネイティブに探しているものを実現するAbstractReloadingMetadataProviderの実装はありませんが、独自に実装することは難しくありません。

SSOProfileには、IDPのXMLが含まれています。 AbstractReloadingMetadataProviderは、オーバーライドされたメソッドを使用して定期的にデータベースにアクセスし、メタデータの変更をリロードします。あなたが必要となります

public class DatabaseMetadataProvider extends AbstractReloadingMetadataProvider { 

    private final Logger log = LoggerFactory.getLogger(DatabaseMetadataProvider.class); 

    private SSOProfileService samlService; 

    private String entityId; 

    public DatabaseMetadataProvider(Timer backgroundTaskTimer, String entityId, SSOProfileService samlService) throws MetadataProviderException { 
     super(backgroundTaskTimer); 
     if (entityId == null) { 
      throw new MetadataProviderException("EntityId may not be null"); 
     } 
     this.entityId = entityId; 
     if (samlService == null) { 
      throw new MetadataProviderException("Saml Service must not be null"); 
     } 
     this.samlService = samlService; 

    } 

    @Override 
    protected String getMetadataIdentifier() { 
     return entityId; 
    } 

    @Override 
    protected byte[] fetchMetadata() throws MetadataProviderException { 
     SSOProfile ssoSaml = samlService.getSSOSamlProfileByEntityID(entityId); 
     if (ssoSaml == null) { 
      log.error("Could not find a valid entity in the DB for " + entityId + " to refresh from. "); 
      return null; 
     } else { 
      log.trace("Found idp metadata for " + ssoSaml.getEntityID() + ": " + ssoSaml.getIdpMetaData()); 
      return ssoSaml.getIdpMetaData().getBytes(StandardCharsets.UTF_8); 
     } 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public synchronized void destroy() { 
     samlService = null; 
     entityId = null; 
     super.destroy(); 
    } 
} 

次のことは、上のこれらMetadataProvidersのリストを返し、あなたのMetadataManagerにそれらを読み込むことができます起動するサービスです。

関連する問題