这是我的LdapTemplate类 public LdapTemplate getLdapTemplete(String ldapID) {
if (ldapID.equalsIgnoreCase(Constants.LDAP1))
{
if (ldapTemplate1 == null)
{
try
{
PasswordCredential passwordCredential = j2cAliasUtility.getAliasDetails(ldapID);
String managerDN = passwordCredential.getUserName();
String managerPwd = new String(passwordCredential.getPassword());
log.info("managerDN :"+managerDN+":: password : "+managerPwd);
LdapContextSource lcs = new LdapContextSource();
lcs.setUrl(ldapUrl1);
lcs.setUserDn(managerDN);
lcs.setPassword(managerPwd);
lcs.setDirObjectFactory(DefaultDirObjectFactory.class);
lcs.afterPropertiesSet();
ldapTemplate1 = new LdapTemplate(lcs);
log.info("ldap1 configured");
return ldapTemplate1;
}
catch (Exception e)
{
log.error("ldapContextCreater / getLdapTemplete / ldap2");
log.error("Error in getting ldap context", e);
}
}
return ldapTemplate1;
}
这是我的J2CAliasUtility类 - 我不知道这个方法做了什么以及它返回了什么?
public PasswordCredential getAliasDetails(String aliasName) throws Exception
{
PasswordCredential result = null;
try
{
// ----------WAS 6 change -------------
Map map = new HashMap();
map.put(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS, aliasName); //{com.ibm.mapping.authDataAlias=ldap1}
CallbackHandler cbh = (WSMappingCallbackHandlerFactory.getInstance()).getCallbackHandler(map, null);
LoginContext lc = new LoginContext("DefaultPrincipalMapping", cbh);
lc.login();
javax.security.auth.Subject subject = lc.getSubject();
java.util.Set creds = subject.getPrivateCredentials();
result = (PasswordCredential) creds.toArray()[0];
}
catch (Exception e)
{
log.info("APPLICATION ERROR: cannot load credentials for j2calias = " + aliasName);
log.error(" "+e);
throw new RuntimeException("Unable to get credentials");
}
return result;
}
答案 0 :(得分:0)
您的类“J2CAliasUtility”似乎从JAAS(Java身份验证和授权服务)身份验证别名中检索用户名和密码,在这种情况下显然是从LDAP查找的。可以在WebSphere Application Server中按照here和here所述配置auth别名。您的代码使用WebSphere安全API从给定别名中检索用户标识和密码。有关程序化登录和JAAS的更多详细信息,请参阅此IBM KnowledgeCenter topic及其相关主题。
答案 1 :(得分:0)
J2C别名是对适配器访问数据库所使用的密码进行加密的功能。适配器可以使用它来连接数据库,而不必使用存储在适配器属性中的用户ID和密码。
J2C别名消除了将密码以明文形式存储在适配器配置属性中的可能,其他人可能会看到它。