@VisibleForTesting protected MetadataProvider createDefaultMetadataProvider(String location) throws ResourceException, MetadataProviderException { return new ResourceBackedMetadataProvider(new Timer(), new SpringResourceWrapperOpenSAMLResource(resourceLoader.getResource(location.trim()))); }
@Bean BeanFactoryPostProcessor idpMetadataLoader() { return beanFactory -> { PathMatchingResourcePatternResolver metadataFilesResolver = new PathMatchingResourcePatternResolver(); try { Resource[] idpMetadataFiles = metadataFilesResolver.getResources("classpath:/idp-*.xml"); Stream.of(idpMetadataFiles).forEach(idpMetadataFile -> { try { Timer refreshTimer = new Timer(true); ResourceBackedMetadataProvider delegate = null; delegate = new ResourceBackedMetadataProvider(refreshTimer, new SpringResourceWrapperOpenSAMLResource(idpMetadataFile)); delegate.setParserPool(parserPool()); ExtendedMetadata extendedMetadata = extendedMetadata().clone(); ExtendedMetadataDelegate provider = new ExtendedMetadataDelegate(delegate, extendedMetadata); provider.setMetadataTrustCheck(true); provider.setMetadataRequireSignature(false); String idpFileName = idpMetadataFile.getFilename(); String idpName = idpFileName.substring(idpFileName.lastIndexOf("idp-") + 4, idpFileName.lastIndexOf(".xml")); extendedMetadata.setAlias(idpName); beanFactory.registerSingleton(idpName, provider); log.info("Loaded Idp Metadata bean {}: {}", idpName, idpMetadataFile); } catch (Exception e) { throw new IllegalStateException("Unable to initialize IDP Metadata", e); } }); } catch (Exception e) { throw new IllegalStateException("Unable to initialize IDP Metadata", e); } }; }
@Bean @Qualifier("metadata") public CachingMetadataManager metadata() throws MetadataProviderException, ResourceException { List<MetadataProvider> providers = new ArrayList<MetadataProvider>(); if(samlProperties != null && samlProperties.getIdp() != null){ for(SAMLProperties.SamlMetadata samlMetadata : samlProperties.getIdp()){ if(samlMetadata.getType().equals("xml")){ ResourceBackedMetadataProvider resourceBackedMetadataProvider = new ResourceBackedMetadataProvider(backgroundTaskTimer(), new ClasspathResource(samlMetadata.getUrl())); resourceBackedMetadataProvider.setParserPool(parserPool()); ExtendedMetadataDelegate extendedMetadataDelegate = new ExtendedMetadataDelegate(resourceBackedMetadataProvider, extendedMetadata()); extendedMetadataDelegate.setMetadataTrustCheck(samlMetadata.isMetadataTrustCheck()); extendedMetadataDelegate.setMetadataRequireSignature(samlMetadata.isMetadataRequireSignature()); backgroundTaskTimer.purge(); providers.add(extendedMetadataDelegate); } else if(samlMetadata.getType().equals("http")){ HTTPMetadataProvider httpMetadataProvider = new HTTPMetadataProvider(backgroundTaskTimer(), httpClient(), samlMetadata.getUrl()); httpMetadataProvider.setParserPool(parserPool()); ExtendedMetadataDelegate extendedMetadataDelegate = new ExtendedMetadataDelegate(httpMetadataProvider, extendedMetadata()); extendedMetadataDelegate.setMetadataTrustCheck(samlMetadata.isMetadataTrustCheck()); extendedMetadataDelegate.setMetadataRequireSignature(samlMetadata.isMetadataRequireSignature()); backgroundTaskTimer.purge(); providers.add(extendedMetadataDelegate); } } } return new CachingMetadataManager(providers); }