クラスをopensaml2.6からopensaml3.1.1に移行する必要がありますコンパイルいくつかのエラーが発生します
1)
Element plaintextElement = getElementAssertion(inputBean);
String xml = XMLHelper.prettyPrintXML(plaintextElement);
新しいバージョンでクラスXMLHelperが見つかりません。
2)
DefaultBootstrap.bootstrap();
builderFactory = Configuration.getBuilderFactory();
Configuration.getMarshallerFactory().getMarshaller(assertion).marshall(assertion);
デフォルトのBootstrapクラスが見つからず、getBuilderFactory()、getMarshallerFactory()メソッドを使用した構成クラスが見つかりません。
3)
BasicCredential credential = new BasicCredential();
これで、コンストラクターのnew BasicCredential()は表示されなくなります。
非推奨の兆候があるドキュメントは見つかりませんでした。このクラスをopensaml3.1.1バージョンに移植するにはどうすればよいですか?
すでにopensaml3にアップグレードできたかどうかはわかりませんが、自分でアップグレードを試みているときにこれに遭遇したので、見つけたものを文書化するつもりだと思いました。
明らかに現時点では優先事項ではないため、ドキュメントはほとんどありません(ここでも言及されています: OpenSaml3ドキュメント )、私が見つけた最も便利な(完全ではない場合でも)ページは次のページです:- https://wiki.shibboleth.net/confluence/display/OS30/Initialization+and+Configuration
1)lib net.shibboleth.utilities:Java-support
にメソッドSerializeSupport
を持つクラスprettyPrintXML
があります
2)初期化はInitializationService
を介して実行されるようになりました。
InitializationService.initialize();
XMLObjectProviderRegistrySupport
を介してビルダー/マーシャラーを取得できます。例:
XMLObjectProviderRegistrySupport.getMarshallerFactory()
XMLObjectProviderRegistrySupport.getBuilderFactory()
XMLObjectProviderRegistrySupport.getUnmarshallerFactory()
OpensamlがJava Service Provider APIを使用していることに注意してください。私の場合(OSGiバンドルorg.Apache.servicemix.bundles:org.Apache.servicemix.bundles.opensaml
を使用)、SAMLアサーションを解析するためにSPI = config META-INF/services/org.opensaml.core.config.Initializer
には、次のエントリが含まれています。
org.opensaml.core.xml.config.XMLObjectProviderInitializer
org.opensaml.core.xml.config.GlobalParserPoolInitializer
org.opensaml.saml.config.XMLObjectProviderInitializer
org.opensaml.saml.config.SAMLConfigurationInitializer
org.opensaml.xmlsec.config.XMLObjectProviderInitializer
EDIT:上記はテストでは機能しましたが、OSGiコンテナーでは実行されませんでした。 OSGiの回避策: OpenSAML3リソースがOSGiコンテナーに「default-config.xml」で見つかりません
標準ライブラリ(org.opensaml:opensaml-core
、org.opensaml:opensaml-saml-api
、org.opensaml:opensaml-saml-impl
、...)を使用する場合、jarファイルとしてSPI configを追加する必要はありません。すでにSPI初期化用の標準構成の構成が含まれています。
3)lib org.opensaml:opensaml-security-api
にクラスBasicCredential
があります。初期化中にキーを提供する代わりの方法は見当たりません。
OS3を開発に使用する方法を学んでいます。これは、base 64samlリクエストをV3バージョンのSAMLObjectに変換する1つの例です。それがあなたを助けることができることを願っています。
プロジェクトを参照してください githubリポジトリ
public class SAMLToolkit {
public static SAMLObject convertBase64ToSaml(String base64Str) {
byte[] decodedBytes = new byte[0];
try {
decodedBytes = Base64.decode(base64Str);
} catch (Base64DecodingException e) {
e.printStackTrace();
return null;
}
InputStream is = new ByteArrayInputStream(decodedBytes);
//is = new InflaterInputStream(is, new Inflater(true));
try {
InitializationService.initialize();
Document messageDoc;
BasicParserPool basicParserPool = new BasicParserPool();
basicParserPool.initialize();
messageDoc = basicParserPool.parse(is);
Element messageElem = messageDoc.getDocumentElement();
Unmarshaller unmarshaller = XMLObjectProviderRegistrySupport.getUnmarshallerFactory().getUnmarshaller(messageElem);
assert unmarshaller != null;
return(SAMLObject) unmarshaller.unmarshall(messageElem);
} catch (InitializationException e) {
e.printStackTrace();
return null;
} catch (XMLParserException e) {
e.printStackTrace();
return null;
} catch (UnmarshallingException e) {
e.printStackTrace();
return null;
} catch (ComponentInitializationException e) {
e.printStackTrace();
return null;
}
}
}