Cordys 对 LDAP的 操作 【增加、删除、修改】


import java.security.Security;
import com.cordys.cpc.bsf.busobject.BSF;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPJSSESecureSocketFactory;
import com.novell.ldap.LDAPSocketFactory;
public class LDAPConfig {
	
	static String LDAP_TO_SERVER = "192.168.100.108";  
    static String LDAP_TO_PORT = "6366";  
    static String LDAP_TO_USER = "cn=Directory Manager,o=mydomain.com";  
    static String LDAP_TO_PWD = "cordys";  
    public static String authenticatedUsersDn = "cn=authenticated users,cn=cordys,cn=defaultInst,o=mydomain.com";  
    public static String ownerOrgDn = "o=system,cn=cordys,cn=defaultInst,o=mydomain.com"; 
    public static String orgUserDn = "cn=organizational users,o=system,cn=cordys,cn=defaultInst,o=mydomain.com";  
    public static String certifiName = "C:/Program Files/OpenText/OpenText Cordys/defaultInst/certificates/truststore/CordysTrustStore.jks";  
	public final static String SSL_TRUST_STORE = "C:\\Works\\Java\\jdk1.7.0_45\\jre\\lib\\security\\cacerts"; //通过keytool导入JRE库证书
	//执行脚本 [keytool -import -trustcacerts -alias laiyifen_dev -keystore "D:\Work\Tool\Java\jdk1.6.0_30\jre\lib\security\cacerts" -file "D:\Work\Workspaces\CordysTest\test\216-dev-cert.cer" -storepass changeit]
    private static LDAPConnection connection;  
    //Cordys调用外部,或者其他LDAP
    public static LDAPConnection getOutGatewayLDAPConnection() {      
          
        if(connection != null && connection.isConnected()){  
            return connection;  
        }else{  
            connection = null;  
        }  
        try { 
            Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());  
            System.setProperty("javax.net.ssl.trustStore", certifiName); 
            //System.setProperty("javax.net.ssl.trustStore", SSL_TRUST_STORE); 
            LDAPSocketFactory ssf = new LDAPJSSESecureSocketFactory();  
            LDAPConnection.setSocketFactory(ssf);  
            connection = new LDAPConnection();        
            connection.connect(LDAP_TO_SERVER, Integer.parseInt(LDAP_TO_PORT) );              
            connection.bind(LDAPConnection.LDAP_V3, LDAP_TO_USER, LDAP_TO_PWD.getBytes("UTF8"));  
        } catch (Exception e) {  
            System.out.println("ldap连接异常");  
            e.printStackTrace();  
        }  
        return connection;  
    }  
    //cordys调用自己的 LDAP
    public static LDAPConnection getInnerLDAPConnection()  
    {  
        return BSF.getLDAPDirectory().getConnection();  
    }

}

import java.util.ArrayList;
import java.util.List;
import com.cordys.cpc.bsf.busobject.BusObjectConfig;
import com.cordys.cpc.bsf.busobject.BusObjectIterator;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPModification;
import com.novell.ldap.LDAPSearchResults;

public class MLDAP extends MLDAPBase
{
    public MLDAP()
    {
        this((BusObjectConfig)null);
    }

    public MLDAP(BusObjectConfig config)
    {
        super(config);
    }

    public static void Test() throws LDAPException
    {
    	
    	getLDAPEntries() ;
    	deleteLDAPEntry();
    	modifyLDAPEntry();
    }
    

    public static void addLDAPEntry() throws LDAPException
    {
    	String UName="cyt005";
    	LDAPConnection connection=LDAPConfig.getOutGatewayLDAPConnection();
        LDAPAttributeSet authUsersAttributeSetUser = new LDAPAttributeSet();  
        authUsersAttributeSetUser.add( new LDAPAttribute("objectclass", new String[]{"top","busauthenticationuser"}));            
        authUsersAttributeSetUser.add( new LDAPAttribute("cn", UName));  
        authUsersAttributeSetUser.add( new LDAPAttribute("osidentity", UName));  
        authUsersAttributeSetUser.add( new LDAPAttribute("description", "It's test"));  
        authUsersAttributeSetUser.add( new LDAPAttribute("userPassword",UName));  
        String context =LDAPConfig.ownerOrgDn;  
        authUsersAttributeSetUser.add( new LDAPAttribute("defaultcontext", context));  
       
        String orgDn = "cn=" + UName + "," +    LDAPConfig.orgUserDn; 
        String authenticatedDn = "cn=" + UName + "," +    LDAPConfig.authenticatedUsersDn; 
        LDAPEntry orgEntry = new LDAPEntry(orgDn, authUsersAttributeSetUser);  
        LDAPEntry authenticatedEntry = new LDAPEntry(authenticatedDn, authUsersAttributeSetUser);  
          
        connection.add(orgEntry);  
        connection.add(authenticatedEntry);  
    }
    
    public static void deleteLDAPEntry() throws LDAPException
    {
    	LDAPConnection connection=LDAPConfig.getOutGatewayLDAPConnection();
    	String cn="cn=cyt003,"+LDAPConfig.authenticatedUsersDn;
    	connection.delete(cn);
    }
    
    public static void modifyLDAPEntry() throws LDAPException
    {
    	LDAPConnection connection=LDAPConfig.getOutGatewayLDAPConnection();
    	String cn="cn=cyt002,"+LDAPConfig.authenticatedUsersDn;
    	connection.modify(cn, new LDAPModification(LDAPModification.REPLACE,new LDAPAttribute("userPassword","cyt_success")));
    	
    }
    
    public static void getLDAPEntries() throws LDAPException
    {

    	List<LDAPEntry> list=new ArrayList();
    	LDAPConnection connection=LDAPConfig.getOutGatewayLDAPConnection();
    	LDAPSearchResults results=connection.search(LDAPConfig.authenticatedUsersDn, LDAPConnection.SCOPE_ONE, "cn=Think",null, false);
    	while(results.hasMore())
    	{
    		LDAPEntry entry=results.next();
    		
    		LDAPAttribute DSAttribute=entry.getAttribute("description");
    		String DSValue=DSAttribute.getStringValue();
    		//...
    		list.add(entry);
    		
    	}
    	
    }
}


如图: LDAPAttribute 的属性 如下图所示:






附加内容: 如果是想修改Cordys的密码,可以调用Cordys自带的WebService 

SetPasswordForUserOperation

This Web service operation enables administrator to change the password of other users.

SOAP Request
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP:Body>
        <SetPasswordForUser xmlns="http://schemas.cordys.com/user/password/1.0">
            <Username>PARAMETER</Username>
            <NewPassword>PARAMETER</NewPassword>
        </SetPasswordForUser>
    </SOAP:Body>
</SOAP:Envelope>
Request Parameters

Parameter

Description

Username

The user for which the new password is set.

NewPassword The new password of the user, in plain-text.

==============================================================================================================================


COSUtil.java


package com.synale.cordys.soa.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import com.eibus.util.system.Native;
import com.synale.cordys.common.util.BaseUtil;
/** 
 * 利用Cordys内部自带的Class操作 SOA 报文
 */  
public class CSOAUtil extends BaseUtil{
	
	private static final String SHA1 = "SHA1";
	private static final String MD5  = "MD5";
	private static final String SHA1_prefix = "{"+SHA1+"}";
	private static final String MD5_prefix  = "{"+MD5+"}";
	

	public static String hashNative(String password,String algorithm, String prefixKey, boolean useDefaultEncoding)
	{
		try
		{
			MessageDigest digest = MessageDigest.getInstance(algorithm);			
			if(useDefaultEncoding) {
				digest.update(password.getBytes());
			} else {
				for(char c : password.toCharArray()) {
					digest.update((byte) (c>>8));
					digest.update((byte) c);
				}
			}
			byte[] digestedPassword = digest.digest();
			byte[] encodedDigested = Native.encodeBinBase64(digestedPassword, digestedPassword.length); 
			return prefixKey + new String(encodedDigested);
		}
		catch (NoSuchAlgorithmException ne)
		{
			return password;
		}
	}
	
	/** 
	 * 利用Cordys LDAP是利用SHA1的加密方式 不可逆的
	 */ 
	
	public static String generateSHA1Password(String plainPassword) {
		return hashNative(plainPassword, SHA1, SHA1_prefix, false);
	}
}


LDAPUtil.java


package com.synale.cordys.soa.util;

import java.util.List;

import com.cordys.cpc.bsf.busobject.BSF;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPModification;

public class LDAPUtil  extends CSOAUtil{
	
    /**
     * 根据用户dn删除LDAP上的用户
     * @param dn
     * @throws Exception 
     * @author cyt
     */
    public static void deleteLDAPEntry(String dn) throws LDAPException  
    {  
        LDAPConnection connection= BSF.getLDAPDirectory().getConnection();
        connection.delete(dn);  
    } 
    /**
     * 根据用户dn更新LDAP上的用户信息
     * @param dn
     * @param List LDAPAttribute
     * @throws Exception 
     * @author cyt
     */
    public static void updateLDAPEntry(String dn,List<LDAPAttribute> Attributes ) throws LDAPException  
    {  
        LDAPConnection connection=BSF.getLDAPDirectory().getConnection(); 
        for(int i=0;i<Attributes.size();i++)
        {
        	connection.modify(dn, new LDAPModification(LDAPModification.REPLACE,Attributes.get(i)));
        }
          
    }  
    
    /**
     * 根据用户dn更新LDAP上的用户信息
     * @param dn
     * @param LDAPAttribute  
     * @throws Exception 
     * @author cyt
     */
    public static void updateLDAPEntry(String dn, String newPassWord ) throws LDAPException  
    {  
    	newPassWord=generateSHA1Password(newPassWord);
        LDAPConnection connection=BSF.getLDAPDirectory().getConnection(); 
        connection.modify(dn, new LDAPModification(LDAPModification.REPLACE,new LDAPAttribute("userPassword",newPassWord)));
          
    }  
    /**
     * 根据用户dn更新LDAP上的用户信息
     * @param dn
     * @param LDAPAttribute  
     * @throws Exception 
     * @author cyt
     */
    public static void updateLDAPEntry(String dn, LDAPAttribute Attribute ) throws LDAPException  
    {  
        LDAPConnection connection=BSF.getLDAPDirectory().getConnection(); 
        connection.modify(dn, new LDAPModification(LDAPModification.REPLACE,Attribute));
          
    }  
	
	

}


如果要判断 该 dn在LDAP中是否存在 ,则使用 read 方法


    /**
     * 根据用户dn查看 LDAP上是否存在该dn
     * @param dn
     * @return true or false
     * @author cyt
     */
    public static boolean isExistInLDAP(String dn)  
    {  
        LDAPConnection connection=BSF.getLDAPDirectory().getConnection(); 
        try {
			connection.read(dn);
			return true;
		} catch (LDAPException e) {
			
			return false;
			
		}
    } 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值