0

SpringDMに切り替えずに、SpringSecurityの実装をOSGi(equinox)バンドルのコンテキストに移行する方法を見つけようとしているのは約半日です。


現在、2つのプロジェクトがあります。

1.認証と承認を処理するためのいくつかのxml構成ファイルに基づくSpringSecurityの実装があります。
2.一方、セキュリティバンドル(上記のもの)と統合する必要がある約200のバンドルを持つ巨大なOGSiバンドルプロジェクト構造があります


mySpringBasedSecurityBundle を作成する最初のステップとして、 mySecurityBundleをロードした後、このメソッドを実行して、 Spring-DataSource を準備したcom / myComp / backend / appsecurity / spring / resources/Spring-Context.xmlにあるセキュリティ構成xmlファイルにアクセスする必要があります。 xmlおよびSpring-Security.xmlは次のとおりです。

    private void loadApplicationContext()
    {
        SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
        new ThreadLocal<Object>();
        setApplicationContext(new ClassPathXmlApplicationContext(SPRING_CONTEXT_ADDRESS));
    }       



しかし、残念ながら、この例外が発生しました。

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [com/myComp/backend/appsecurity/spring/resources/Spring-Context.xml]; nested exception is java.io.FileNotFoundException: class path resource [com/myComp/backend/appsecurity/spring/resources/Spring-Context.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.myComp.backend.appsecurity.spring.appSecurityManager.loadApplicationContext(appSecurityManager.java:233)
at com.myComp.backend.appsecurity.spring.appSecurityManager.internalInitialize(appSecurityManager.java:106)
at com.myComp.BaseModuleManager.initialize(BaseModuleManager.java:511)
at com.myComp.BaseModuleManager.initialize(BaseModuleManager.java:1)
at com.myComp.backend.BaseBackendManager.initializeSubBackendManagers(BaseBackendManager.java:643)
at com.myComp.backend.BaseBackendManager.prepareSubBackendManagers(BaseBackendManager.java:885)
at com.myComp.backend.BackendManager.internalStart(BackendManager.java:127)
at com.myComp.BaseModuleManager.start(BaseModuleManager.java:574)
at com.myComp.BaseModuleManager.start(BaseModuleManager.java:1)
at com.myComp.application.BaseApplicationStub.startBackendManager(BaseApplicationStub.java:2407)
at com.myComp.Application.frameworkEvent(Application.java:72)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:874)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)Caused by: java.io.FileNotFoundException: class path resource [com/myComp/backend/appsecurity/spring/resources/Spring-Context.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
.. 26 more


私がWebを検索する限り、この問題に対する唯一の推奨事項はSpringDM上のアプリケーションで終わりますが、ProjectManagerがSpringDMに切り替えることは受け入れられず、正直なところ、SpringDMについてはわかりません。

SpringCoreの機能を使用してこの問題を解決するのを手伝っていただけませんか。



たくさんのMoeinに感謝します

4

1 に答える 1

0

Spring DM は実際には必要ありません。これは単に OSGi と Spring の間の架け橋を提供するだけであり、OSGi 環境ですべてのコンテキスト ファイルを適切にロードするなどの優れた点があります。これは自分で行うこともできますが、クラスローディングの問題を補う必要があります。これが問題です。

これを試して、クラスローディングの問題を修正してください。

ApplicationContext ctx = new ClassPathXmlApplicationContext(myCtxPath)
{
    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader)
    {
        super.initBeanDefinitionReader(reader);
        reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
        reader.setBeanClassLoader(getClassLoader());
    }
}

ところで、メソッドの 2 行目は何の役にも立ちません。

于 2012-06-05T14:51:22.410 に答える