在Liberty Profile

时间:2017-01-27 20:20:53

标签: websphere-liberty

我在Liberty Profile上运行了一些Java代码,它使用MS Active Directory进行身份验证并进行LDAP搜索。代码使用JNDI并执行它的目的。问题是LDAP参数是用Java硬编码的。有效,但可以改进:

ldap.put(Context.PROVIDER_URL,  "ldap://ad.foo.bar:389");
ldap.put(Context.SECURITY_PRINCIPAL, "CN=account,OU=A,DC=ad,DC=foo,DC=bar");
ldap.put(Context.SECURITY_CREDENTIALS, "apoorlykeptsecret");
...
ldapCtxt = new InitialDirContext(ldap);

是否可以从server.xml文件中的ldapRegistry元素中选择LDAP属性?还是我走错了路?有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

是的,您应该能够使用server.xml中的<ldapRegistry id="ldap" realm="SampleLdapADRealm" host="ldapserver.mycity.mycompany.com" port="389" baseDN="cn=users,dc=adtest,dc=mycity,dc=mycompany,dc=com" bindDN="cn=testuser,cn=users,dc=adtest,dc=mycity,dc=mycompany,dc=com" bindPassword="testuserpwd" ldapType="Microsoft Active Directory"> <activedFilters userFilter="(&(sAMAccountName=%v)(objectcategory=user))" groupFilter="(&(cn=%v)(objectcategory=group))" userIdMap="user:sAMAccountName" groupIdMap="*:cn" groupMemberIdMap="memberOf:member" > </activedFilters> </ldapRegistry> 元素进行配置。

例如:

<jndiEntry jndiName="ldap/provider_url" value="ldap://ad.foo.bar:389"/>
<jndiEntry jndiName="ldap/secuirty_principal" value="CN=account,OU=A,DC=ad,DC=foo,DC=bar"/>
<!-- WARNING: Storing passwords is JNDI is not secure -->
<jndiEntry jndiName="ldap/security_credentials" value="apoorlykeptsecret"/>


String providerUrl = InitialContext.doLookup("ldap/provider_url");
// etc...

有关完整文档,请参阅:see here

作为另一种快速方法,您可以将这些值作为JNDI条目放在server.xml配置中,并通过JNDI查找获取应用程序中的值。例如:

dog.getTotalTime()