You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义TEIID JDBC转换器无法获取Kerberos票据用户主体

如何在Teiid自定义转换器的execute方法中获取Kerberos用户主体nfunke@FUNKE.HK?

我这边遇到个Teiid结合Kerberos的问题,想请教下大家:我已经通过Kerberos票据成功建立了TEIID JDBC连接,票据详情显示默认主体是nfunke@FUNKE.HK,但在自定义转换器的execute方法里,只能获取到数据源配置的服务主体,拿不到用户主体nfunke。

下面是我的代码片段:

public void execute(String tableName, List<String> columns, Map<String, List<Object>> values, Subject subject, Limit limit) throws IonicTranslatorException{
    // ...
    if (subject!=null) {
        users = subject.getPrincipals();
        for(Principal p: users){
            log.warn("available subject: " + p.getName());
            log.warn("Type:" + p.getClass().getName());
        }
    }
    // ...
}

日志输出结果如下:

..... available subject: HTTP/52.201.217.84 
..... Type:org.jboss.security.SimplePrincipal 
..... available subject: Roles 
..... Type:org.jboss.security.SimpleGroup 
..... available subject: CallerPrincipal 
..... Type:org.jboss.security.SimpleGroup 
..... available subject: HTTP/52.201.217.84@FUNKE.HK 
..... Type:javax.security.auth.kerberos.KerberosPrincipal

我的standalone.xml中的安全域配置:

<security-domain name="FUNKE.HK">
    <authentication>
        <login-module code="SPNEGO" flag="requisite">
            <module-option name="password-stacking" value="useFirstPass"/>
            <module-option name="serverSecurityDomain" value="host"/>
            <module-option name="removeRealmFromPrincipal" value="true"/>
        </login-module>
        <login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required" module="org.jboss.security.negotiation">
            <module-option name="storeKey" value="true"/>
            <module-option name="userKeyTab" value="true"/>
            <module-option name="principal" value="HTTP/52.201.217.84@FUNKE.HK"/>
            <module-option name="useKeyTab" value="true"/>
            <module-option name="keyTab" value="/etc/krb5.keytab"/>
            <module-option name="doNotPrompt" value="true"/>
            <module-option name="debug" value="true"/>
            <module-option name="useTicketCache" value="true"/>
            <module-option name="refreshKrb5Config" value="true"/>
            <module-option name="isInitiator" value="true"/>
            <module-option name="delegationCredential" value="USE"/>
            <module-option name="addGSSCredential" value="true"/>
        </login-module>
    </authentication>
</security-domain>

目前查询功能是正常运行的,但我就是不知道怎么从上下文里拿到用户名nfunke,有没有懂的朋友指点一下?

内容的提问来源于stack exchange,提问作者Norbert Funke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:04:09