Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenSAML3.3读取(adfs)FederationService.xml的正确方法?_Java_Xml_Metadata_Adfs_Opensaml - Fatal编程技术网

Java OpenSAML3.3读取(adfs)FederationService.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("/

我正在我的应用程序中集成OpenSAML 3.3,而不是硬编码所有URL等,我希望能够使用配置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();
但是,这给了我一个错误:

使用一个使用OpenSAML2.6.4的github项目(),我在阅读它时没有遇到任何问题,但我想继续使用最新版本3.3


我是否缺少一些基本设置?

有两件事需要解决:

  • 在OpenSaml v3中,许多类实例需要有一个ID,
    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() );
                }
            }
        }