Java OpenSAML3.3读取(adfs)FederationService.xml的正确方法?
我正在我的应用程序中集成OpenSAML 3.3,而不是硬编码所有URL等,我希望能够使用配置XML 我得到了一个adfs实例的XML文件,它是“FederationMetadata.XML” 这是我用来阅读的片段:Java OpenSAML3.3读取(adfs)FederationService.xml的正确方法?,java,xml,metadata,adfs,opensaml,Java,Xml,Metadata,Adfs,Opensaml,我正在我的应用程序中集成OpenSAML 3.3,而不是硬编码所有URL等,我希望能够使用配置XML 我得到了一个adfs实例的XML文件,它是“FederationMetadata.XML” 这是我用来阅读的片段: InitializationService.initialize(); FilesystemMetadataResolver idpMetaDataProvider = new FilesystemMetadataResolver( new File("/
InitializationService.initialize();
FilesystemMetadataResolver idpMetaDataProvider = new FilesystemMetadataResolver( new File("/home/raudenaerde/sso/FederationMetadata.xml") );
idpMetaDataProvider.setRequireValidMetadata(true);
idpMetaDataProvider.setParserPool(new BasicParserPool());
idpMetaDataProvider.initialize();
但是,这给了我一个错误:
使用一个使用OpenSAML2.6.4的github项目(),我在阅读它时没有遇到任何问题,但我想继续使用最新版本3.3
我是否缺少一些基本设置?有两件事需要解决:
setId(String)
必须在initialize()之前调用
basicParspool
也需要初始化 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() );
}
}
}
如果没有您的帮助,我很难通过IterableMetadasource接口猜出FilesystemMetadataResolver类型是一种iterable类型。多谢各位!
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() );
}
}
}