我正在将OpenSAML 3.3集成到我的应用程序中,而不是硬编码所有urls等等,我希望能够使用配置XML。
为adfs实例提供了这样一个XML文件,它是“FederationMetadata.xml”。
这是我用来读它的片段:
InitializationService.initialize();
FilesystemMetadataResolver idpMetaDataProvider = new FilesystemMetadataResolver( new File("/home/raudenaerde/sso/FederationMetadata.xml") );
idpMetaDataProvider.setRequireValidMetadata(true);
idpMetaDataProvider.setParserPool(new BasicParserPool());
idpMetaDataProvider.initialize();但是,这给了我一个错误:
线程"main“> net.shibboleth.utilities.java.support.component.ComponentInitializationException:>组件标识符中的异常不能为空
使用使用https://github.com/coveo/saml-client 2.6.4的github项目,我阅读它没有问题,但我想继续使用最新版本3.3。
我是不是错过了一些基本的设计?
发布于 2017-05-23 16:52:23
有两件事需要修复:
initialize()之前调用setId(String)BasicParserPool也需要初始化。完整的工作代码:
InitializationService.initialize();
FilesystemMetadataResolver idpMetaDataProvider = new FilesystemMetadataResolver( new File( "/home/raudenaerde/sso/FederationMetadata.xml" ) );
idpMetaDataProvider.setRequireValidMetadata( true );
idpMetaDataProvider.setId( "myId" );
BasicParserPool pool = new BasicParserPool();
pool.initialize();
idpMetaDataProvider.setParserPool( pool );
idpMetaDataProvider.initialize();
for ( EntityDescriptor idpEntityDescriptor : idpMetaDataProvider )
{
System.out.println( idpEntityDescriptor.getID() );
for ( SingleSignOnService sss : idpEntityDescriptor.getIDPSSODescriptor( SAMLConstants.SAML20P_NS ).getSingleSignOnServices() )
{
if ( sss.getBinding().equals( SAMLConstants.SAML2_REDIRECT_BINDING_URI ) )
{
System.out.println( sss.getLocation() );
}
}
for ( ArtifactResolutionService ars : idpEntityDescriptor.getIDPSSODescriptor( SAMLConstants.SAML20P_NS ).getArtifactResolutionServices() )
{
if ( ars.getBinding().equals( SAMLConstants.SAML2_SOAP11_BINDING_URI ) )
{
System.out.println( ars.getLocation() );
}
}
}https://stackoverflow.com/questions/44134637
复制相似问题