繁体   English   中英

WSO2 Identity Server 自定义租户监听器

[英]WSO2 Identity Server custom Tenant Listener

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

经过一番挖掘,我最终扩展了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"

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM