WSO2 IS自定义本地认证器部署后未在本地&出站认证配置显示问题咨询
WSO2 IS 自定义本地认证器未显示排查方案
一、验证认证器Bundle部署状态
WSO2 IS基于OSGI架构,所有扩展包都以Bundle形式运行,可通过以下步骤确认部署状态:
- 启动WSO2 IS服务,在服务运行的终端窗口输入
osgi回车,进入OSGI命令行交互模式 - 执行查询命令:
ss org.wso2.custom.authenticator.local- 若返回结果中状态为
ACTIVE:说明Bundle已成功加载 - 若状态为
INSTALLED:说明存在依赖缺失,执行diag <BundleID>(为ss命令返回结果第一列的数字)即可查看具体缺失的依赖项 - 若未查询到对应Bundle:说明Jar包未被识别,需检查dropins目录读写权限、Jar包是否损坏、打包产物是否符合OSGI Bundle规范
- 若返回结果中状态为
二、日志定位部署问题
默认日志路径为<WSO2_IS_HOME>/repository/logs/wso2carbon.log,可通过以下方式开启更细粒度日志:
- 编辑日志配置文件
<WSO2_IS_HOME>/repository/conf/log4j2.properties,添加如下配置:
logger.custom-auth.name = org.wso2.custom.authenticator.local logger.custom-auth.level = DEBUG
- 重启WSO2 IS服务,在日志中搜索以下关键字:
- 存在
BasicCustomAuthenticator bundle is activated:说明Bundle激活成功 - 存在
BasicCustomAuthenticator bundle activation Failed:查看对应报错堆栈即可定位激活失败原因
三、当前代码与配置的已知问题修正
从你提供的代码和pom.xml来看,存在以下可能导致认证器不显示的问题:
1. 缺失OSGI服务注册注解
BasicCustomAuthenticatorServiceComponent类缺少OSGI组件注解,导致服务无法被自动注册,需补充注解如下:
import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.osgi.service.component.annotations.ReferencePolicy; import org.wso2.carbon.user.core.service.RealmService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; import org.wso2.carbon.identity.application.authentication.framework.ApplicationAuthenticator; @Component( name = "org.wso2.custom.authenticator.local.internal.BasicCustomAuthenticatorServiceComponent", immediate = true ) public class BasicCustomAuthenticatorServiceComponent { private static final Log log = LogFactory.getLog(BasicCustomAuthenticatorServiceComponent.class); private static RealmService realmService; public static RealmService getRealmService() { return realmService; } @Activate protected void activate(ComponentContext ctxt) { try { BasicCustomAuthenticator basicCustomAuth = new BasicCustomAuthenticator(); ctxt.getBundleContext().registerService(ApplicationAuthenticator.class.getName(), basicCustomAuth, null); log.info("BasicCustomAuthenticator bundle is activated"); } catch (Throwable e) { log.error("BasicCustomAuthenticator bundle activation Failed", e); } } @Deactivate protected void deactivate(ComponentContext ctxt) { log.info("BasicCustomAuthenticator bundle is deactivated"); } @Reference( name = "realm.service", service = RealmService.class, cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.DYNAMIC, unbind = "unsetRealmService" ) protected void setRealmService(RealmService realmService) { log.debug("Setting the Realm Service"); BasicCustomAuthenticatorServiceComponent.realmService = realmService; } protected void unsetRealmService(RealmService realmService) { log.debug("UnSetting the Realm Service"); BasicCustomAuthenticatorServiceComponent.realmService = null; } }
2. 检查常量类定义
确认代码中引用的BasicCustomAuthenticatorConstants类已正确定义,且包含AUTHENTICATOR_FRIENDLY_NAME、AUTHENTICATOR_NAME、USER_NAME、PASSWORD四个常量,若缺失该类需补充。
3. JDK版本兼容性检查
pom.xml中当前配置的JDK编译版本为1.7,若你部署的WSO2 IS运行在JDK8及以上版本,可将maven-compiler-plugin的source和target参数调整为1.8,避免兼容性问题。
内容的提问来源于stack exchange,提问作者Aakanksha
相关产品推荐
相关产品推荐

