自定义翻译器中没有用户主体和 TEIID JDBC



我使用 kerberos 票证成功连接到 TEIID。我喜欢获取票证中的默认主体

门票详情: 票证缓存:密钥环:持久:6003:6003 默认主体:nfunke@FUNKE.HK

有效起始过期服务主体 05/21/2018 21:14:46 05/22/2018 21:14:44 krbtgt/FUNKE.HK@FUNKE。香港

但是在转换器的执行函数中,我只从在数据源配置的服务中获取主体。

法典:

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());

结果我得到:

..... 可用主题:HTTP/52.201.217.84
..... 类型:org.jboss.security.SimplePrincipal
..... 可用主题:角色
..... 类型:org.jboss.security.SimpleGroup
..... 可用主题: 呼叫者校长
..... 类型:org.jboss.security.SimpleGroup
..... 可用主题:HTTP/52.201.217.84@FUNKE。香港
..... 类型:javax.security.auth.kerberos.KerberosPrincipal

但没有"nfunke">

从上下文中获取用户名的位置?

在独立.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>

是的,我可以毫无问题地运行查询

如果要委派给数据源,首先需要在数据源配置上定义"安全域"。然后,您需要使用"登录模块"定义另一个安全域,如上所述。查看 Kerberos 代表团

最新更新