在 Apache 目录服务器中存储 Java 对象,第 2 部分:在 ApacheDS 中存储、搜索和检索 Java 对象(下)
2010-04-19 00:00:00 来源:WEB开发网清单 11. LDAP4JavaObjects
public class LDAP4JavaObjects {
protected String commonName = null;
protected String surName = null;
protected String userID = null;
protected String javaObjectCN = null;
protected String userName = null;
protected String password = null;
protected String initialContext = null;
private String workingContext = null;
protected DirContext dirContext = null;
protected Properties properties = null;
protected Object javaObject = null;
protected Attributes attributes = null;
public LDAP4JavaObjects() {
properties = new Properties();
attributes = new BasicAttributes(true);
workingContext = "ou=users";
initialContext = workingContext;
try {
InputStream inputStream = new FileInputStream( "ApacheDS.properties");
properties.load(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}//LDAPJavaObjects
public void setUserName(String userName){
properties.setProperty("java.naming.security.principal", userName);
this.userName = userName;
}
public void setPassword(String password) {
properties.setProperty("java.naming.security.credentials", password);
this.password = password;
}
protected void connect() {
try {
// Fetch the directory context.
dirContext= new InitialDirContext(properties);
} catch (NamingException e) {
System.out.println("Getting initial context operation failed: " + e);
}
}
protected void close() {
try {
// Close the directory context.
dirContext.close();
} catch (NamingException e) {
System.out.println("Closing initial context operation failed: " + e);
}
}
public void setJavaObject(Object obj) throws java.io.NotSerializableException {
if (obj instanceof java.io.Serializable)
javaObject = obj;
}
protected boolean isObjectPresent(String uid, String cn, String workContext) {
NamingEnumeration ne = search(uid, cn, workContext);
if (ne != null)
return true;
else
return false;
}//isObjectPresent
protected NamingEnumeration search(String user, String object, String workContext) {
NamingEnumeration ne = null;
String filter = new String();
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
try {
if (user != null && object == null) {
addUserAttribute ("uid", user);
addUserAttribute ("objectClass", "person");
ne = dirContext.search(workContext, attributes);
if (ne != null && ne.hasMore())
return ne;
else
return null;
}else if (user == null && object != null)
{
filter = "(cn="+object+")";
ctls.setReturningObjFlag(true);
ne = dirContext.search(workContext, filter, ctls);
if (ne != null && ne.hasMore())
return ne;
else
return null;
}
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}//search
protected void update(String uid, String cn, String workContext) {
if (uid != null && cn == null)
{
String[] objClassValues = {"top","person"};
addUserAttribute ("uid", uid);
if (commonName != null)
addUserAttribute ("cn", commonName);
addUserAttributes ("objectClass", objClassValues);
try {
dirContext.rebind(workContext, null, attributes);
} catch (NamingException e) {
System.out.println("Storing operation failed: " + e);
}
} else if (uid == null && cn != null) {
addUserAttribute ("cn", cn);
try {
dirContext.rebind(workContext, javaObject, attributes);
} catch (NamingException e) {
e.printStackTrace();
}
}
}//update
protected void store(String uid, String cn, String workContext) {
if (uid != null && cn == null)
{
String[] objClassValues = {"top","person"};
addUserAttribute ("uid", uid);
if (commonName != null)
addUserAttribute ("cn", commonName);
addUserAttributes ("objectClass", objClassValues);
try
{
dirContext.bind(workContext, null, attributes);
} catch (NamingException e) {
e.printStackTrace();
}
} else if (uid == null && cn != null) {
addUserAttribute ("cn", cn);
try {
dirContext.bind(workContext, javaObject, attributes);
} catch (NamingException e) {
e.printStackTrace();
}
}
}//store
public void addUserAttribute (String name, String value){
Attribute attr = new BasicAttribute(name);
attr.add(value);
attributes.put(attr);
}//addUserAttribute
public void addUserAttributes(String name, String[] value) {
Attribute attr = new BasicAttribute (name);
if (value != null) {
for (int i =0; i < value.length; i++)
attr.add(value[i]);
}
attributes.put(attr);
}//addUserAttribute
public void writeToServer () {
connect();
if (userID == null && commonName != null)
userID = commonName;
//Check if the cn of the Java object is set.
//If not, use commonName as object cn.
if (javaObject != null)
{
if (javaObjectCN == null && commonName != null)
javaObjectCN = commonName;
}
if (!(isObjectPresent(userID, null, initialContext)))
{
workingContext = "uid="+userID+","+initialContext;
store(userID, null, workingContext);
workingContext = "cn="+javaObjectCN +",uid="+userID+","+initialContext;
store( null, javaObjectCN, workingContext);
} else if (isObjectPresent(null, javaObjectCN,
"uid="+userID+","+initialContext)) {
workingContext = "cn="+javaObjectCN +",uid="+userID +","+ initialContext;
update(null, javaObjectCN, workingContext);
} else {
workingContext = "cn="+javaObjectCN +",uid="+userID +","+ initialContext;
store(null, javaObjectCN, workingContext);
}
close();
}//writeToServer()
public void searchFromServer(String user, String object) {
connect();
NamingEnumeration ne = search(user, object, initialContext);
if (ne != null)
processSearchResult(ne);
else
System.out.println ("searchFromServer... failed");
close();
}//searchFromServer
private void processSearchResult (NamingEnumeration ne){
try {
if (ne!=null)
{
while (ne.hasMore()) {
SearchResult sr = (SearchResult) ne.next();
Object obj = sr.getObject();
if (obj != null) {
javaObject = obj;
javaObjectCN = sr.getName();
} else {
userID = sr.getName();
processAttributes(sr.getAttributes());
}
}//while
}//if (ne != null)
} catch (javax.naming.NamingException e) {
e.printStackTrace();
}
}//processSearchResult
private void processAttributes(Attributes attrs){
try {
for (Enumeration e = attrs.getAll() ; e.hasMoreElements() ;) {
Attribute attr = (Attribute) e.nextElement();
if (attr.getID().equals("cn"))
commonName = (String)attr.get();
else if (attr.getID().equals("sn"))
surName = (String)attr.get();
}
} catch (javax.naming.NamingException ne){
ne.printStackTrace();
}
}//processAttributes
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserID() {
return userID;
}
public void setJavaObjectCN(String objectCN) {
this.javaObjectCN = objectCN;
}
public String getJavaObjectCN() {
return javaObjectCN;
}
public void setCommonName (String cn) {
commonName = cn;
}
public void setSurName (String sn) {
surName = sn;
}
public String getCommonName() {
return commonName;
}
public String getSurName() {
return surName;
}
public static void main(String[] args) {
LDAP4JavaObjects javaLdapClient = new LDAP4JavaObjects();
javaLdapClient.setPassword("secret");
javaLdapClient.setUserID("Alice");
//Instantiating a Java object.
MessagingPreferences msgPreferences =
new MessagingPreferences ();
//Setting a Java object.
try {
javaLdapClient.setJavaObject (msgPreferences);
} catch (Exception e) {
e.printStackTrace();
}
javaLdapClient.setJavaObjectCN ("preferences");
javaLdapClient.writeToServer();
System.out.println ("Entry stored in ApacheDS..");
}//main
}
- ››Apache添加mod_aspdotnet.so支持ASP.NET配置指南
- ››Apache中改变php.ini的路径
- ››Apache2.2与Tomcat6整合及虚拟主机配置
- ››Apache+php+mysql在windows下的安装与配置图解
- ››服务器群集:Windows 2000 和 Windows Server 200...
- ››服务器维护经验谈 图解DHCP故障排除
- ››Apache+Subversion完美结合,CentOS下实现版本控制...
- ››Apache HTTPServer2.2.16 发布
- ››Apache Tomcat 6.0.29 (稳定版)
- ››Apache HTTP Server 2.3.6 alpha 发布
- ››Apache+Subversion如何实现版本控制
- ››Apache+Subversion完美结合
更多精彩
赞助商链接