2012-08-23 31 views
0

我已經部署在Apache Karaf 2個OSGi束。 AB。我的AOSGi捆綁包作爲基本身份驗證處理程序。我已經建立了我的安全處理程序,它工作正常:共享對象的OSGi bundle之間

<bean id="securityHandler" class="org.eclipse.jetty.security.ConstraintSecurityHandler"> 
    <property name="authenticator"> 
     <bean class="org.eclipse.jetty.security.authentication.BasicAuthenticator"/> 
    </property> 
    <property name="constraintMappings"> 
     <list> 
      <ref bean="constraintMapping"/> 
     </list> 
    </property> 
    <property name="loginService" ref="loginService"/> 
    <property name="strict" value="false"/> 
    <property name="identityService" ref="identityService"/> 
</bean> 

此處理程序捆綁A。我需要做的是將此處理程序作爲OSGi服務供其他軟件包使用,在這種情況下,請使用軟件包B。我不能實現任何接口到ConstraintSecurityHandler類,因爲它是從org.eclipse.jetty.security包。

我試圖創建自己的處理程序類,然後擴展ConstraintSecurityHandler和執行我的接口。所以OSGi服務是這樣的:

<osgi:service ref="securityHandler" interface="my.company.MyInterface" /> 

這是不行的,我得到異常:

org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route[[From[jetty:http://0.0.0.0:8019/TARGETjobs/Indeed?hand... because of Failed to resolve endpoint: jetty://http://0.0.0.0:8019/TARGETjobs/Indeed?handlers=securityHandler&matchOnUriPrefix=true due to: null 

所以,問題是我怎麼能做出這種securityHandler bean作爲一個OSGi的服務提供給其他OSGi捆綁?

回答

1

我已經找到了我自己的解決方案。我的A束我已經創建:

public class BasicAuthSecurityHandler implements Handler { 

    private ConstraintSecurityHandler securityHandler; 

    @Override 
    public ConstraintSecurityHandler getSecurityHandler() { 
     return securityHandler; 
    } 

    public void setSecurityHandler(ConstraintSecurityHandler securityHandler) { 
     this.securityHandler = securityHandler; 
    }   

} 

和接口:

public interface Handler { 

    ConstraintSecurityHandler getSecurityHandler(); 

} 

在我ASpring方面,我設置的安全處理程序這個bean,並從這個bean做OSGi服務:

<bean id="basicAuthSecurityHandler" class="com.groupgti.handler.authentication.basic.BasicAuthSecurityHandler"> 
    <property name="securityHandler" ref="securityHandler"/> 
</bean> 

<osgi:service ref="basicAuthSecurityHandler" interface="com.groupgti.handler.authentication.basic.Handler"/> 

現在在我的包B我可以很容易地檢索我的安全處理程序,如下所示:

<osgi:reference id="basicAuthSecurityHandler" interface="com.groupgti.handler.authentication.basic.Handler"/> 
<bean id="securityHandler" factory-bean="basicAuthSecurityHandler" factory-method="getSecurityHandler"/> 

一切工作正常。