【问题标题】:WSO2 Identity Server custom Tenant ListenerWSO2 Identity Server 自定义租户监听器
【发布时间】:2020-07-02 11:20:22
【问题描述】:

我正在尝试向 WSO2 身份服务器引入一个自定义租户侦听器,以便挂钩租户创建并为将在我的服务器上创建的所有租户应用一些我需要的通用配置(例如一些常见角色、一个常见的二级用户存储等)。

经过一番挖掘,我最终扩展了AbstractIdentityTenantMgtListener,因为我找不到任何类似我正在做的事情的文档(我已经看到了用户存储侦听器的文档,但它似乎不是完全相同的事情)我最终创建了一个 OSGI 组件并将其添加到插件中,但我的问题是,当我的服务被注册时,它是不活动的并且不会被任何时候调用。

我目前拥有的东西非常少,只是为了让钩子被调用。像这样的:

/**
 * @scr.component name="org.wso2is.tenantlistener.internal.TenantListenerServiceComponent" *
 *     immediate="true"
 */
public class TenantListenerServiceComponent {

    private static Log log = LogFactory.getLog(TenantListenerServiceComponent.class);

    protected void activate(ComponentContext context) {
        log.info("Trying to activate Tenant Listener");
        try {
        BundleContext bundleContext = context.getBundleContext();
            MyTenantListener listener = new MyTenantListener();
            ServiceRegistration<?> serviceRegistration = bundleContext.registerService(
                MyTenantListener.class.getName(), listener, null);
        log.info("Tenant Listener bundle is activated with id: " + serviceRegistration.getReference().getBundle().getBundleId());
        } catch (Throwable e) {
            log.fatal("----Error while activating Tenant listener----", e);
        }
    }

    protected void deactivate(ComponentContext context) {
        log.info("Tenant Listener bundle is de-activated");
    }

}
public class MyTenantListener extends AbstractIdentityTenantMgtListener {

    private static final Log log = LogFactory.getLog(MyTenantListener.class);

    @Override
    public void onTenantCreate(TenantInfoBean tenantInfoBean) throws StratosException {
        log.info("Hooking on tenant creation!! Received a new tenant: " + tenantInfoBean.getTenantId() + ", " + tenantInfoBean.getTenantDomain());
    }

    @Override
    public int getListenerOrder() {
        return 999;
    }

}

另外,我的捆绑包配置如下所示:

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <version>4.2.1</version>
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
      <Bundle-Name>${project.artifactId}</Bundle-Name>
      <Private-Package>org.wso2is.tenantlistener.internal</Private-Package>
      <Import-Package>org.osgi.framework,javax.servlet,
        javax.servlet.http,
        *;resolution:=optional
      </Import-Package>
      <Export-Package>!org.wso2is.tenantlistener.internal,org.wso2is.tenantlistener.*;</Export-Package>
      <DynamicImport-Package>*</DynamicImport-Package>
    </instructions>
  </configuration>
</plugin>

我什至尝试将我的听众添加到我的deployment.toml,如下所示,但一无所获:

[[event_handler]]
name= "org.wso2is.tenantlistener.MyTenantListener"

有没有人尝试过类似的成功(让自定义租户侦听器实际被调用)?可能是我遗漏了一些细节,但无法弄清楚。

【问题讨论】:

    标签: java wso2 wso2is wso2carbon


    【解决方案1】:

    毕竟,在对 WSO2 的存储库进行了一些额外的挖掘之后,我终于找到了答案,更具体地说,this PR 帮助我发现了我的问题。

    仅供参考可能面临类似问题的其他人,问题是我如何注册我的服务。我应该使用TenantMgtListener的接口,而不是使用我的具体实现的名称。

    所以TenantListenerServiceComponent::activate 上的服务注册行应该是:

     ServiceRegistration<?> serviceRegistration = bundleContext.registerService(TenantMgtListener.class.getName(), listener, null);
    

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多