⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldaptestserver.java

📁 acegi构造安全的java系统
💻 JAVA
字号:
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.acegisecurity.ldap;import org.apache.directory.server.core.configuration.Configuration;import org.apache.directory.server.core.configuration.MutablePartitionConfiguration;import org.apache.directory.server.core.configuration.MutableStartupConfiguration;import org.apache.directory.server.core.jndi.CoreContextFactory;import org.apache.directory.server.core.partition.DefaultPartitionNexus;import java.io.File;import java.util.HashSet;import java.util.Properties;import java.util.Set;import javax.naming.Context;import javax.naming.NameAlreadyBoundException;import javax.naming.NamingException;import javax.naming.directory.Attribute;import javax.naming.directory.Attributes;import javax.naming.directory.BasicAttribute;import javax.naming.directory.BasicAttributes;import javax.naming.directory.DirContext;import javax.naming.directory.InitialDirContext;/** * An embedded LDAP test server, complete with test data for running the unit tests against. * * @author Luke Taylor * @version $Id: LdapTestServer.java 1968 2007-08-28 15:26:59Z luke_t $ */public class LdapTestServer {    //~ Instance fields ================================================================================================    private DirContext serverContext;    private MutableStartupConfiguration cfg;    //~ Constructors ===================================================================================================    /**     * Starts up and configures ApacheDS.     */    public LdapTestServer() {        startLdapServer();        createManagerUser();        initTestData();    }    //~ Methods ========================================================================================================    public void createGroup(String cn, String groupContext, String ou, String[] memberDns) {        Attributes group = new BasicAttributes("cn", cn);        Attribute members = new BasicAttribute("member");        Attribute orgUnit = new BasicAttribute("ou", ou);        for (int i = 0; i < memberDns.length; i++) {            members.add(memberDns[i]);        }        Attribute objectClass = new BasicAttribute("objectClass");        objectClass.add("top");        objectClass.add("groupOfNames");        group.put(objectClass);        group.put(members);        group.put(orgUnit);        try {            DirContext ctx = serverContext.createSubcontext("cn=" + cn + "," + groupContext, group);            System.out.println("Created group " + ctx.getNameInNamespace());        } catch (NameAlreadyBoundException ignore) {//            System.out.println(" group " + cn + " already exists.");        } catch (NamingException ne) {            System.err.println("Failed to create group.");            ne.printStackTrace();        }    }    private void createManagerUser() {        Attributes user = new BasicAttributes("cn", "manager", true);        user.put("userPassword", "acegisecurity");        Attribute objectClass = new BasicAttribute("objectClass");        user.put(objectClass);        objectClass.add("top");        objectClass.add("person");        objectClass.add("organizationalPerson");        objectClass.add("inetOrgPerson");        user.put("sn", "Manager");        user.put("cn", "manager");        try {            serverContext.createSubcontext("cn=manager", user);        } catch (NameAlreadyBoundException ignore) {            //           System.out.println("Manager user already exists.");        } catch (NamingException ne) {            System.err.println("Failed to create manager user.");            ne.printStackTrace();        }    }    public void createOu(String name) {        Attributes ou = new BasicAttributes("ou", name);        Attribute objectClass = new BasicAttribute("objectClass");        objectClass.add("top");        objectClass.add("organizationalUnit");        ou.put(objectClass);        try {            serverContext.createSubcontext(name, ou);        } catch (NameAlreadyBoundException ignore) {            //           System.out.println(" ou " + name + " already exists.");        } catch (NamingException ne) {            System.err.println("Failed to create ou.");            ne.printStackTrace();        }    }    public void createUser(String uid, String cn, String password) {        Attributes user = new BasicAttributes("uid", uid);        user.put("cn", cn);        user.put("userPassword", LdapUtils.getUtf8Bytes(password));        Attribute objectClass = new BasicAttribute("objectClass");        user.put(objectClass);        objectClass.add("top");        objectClass.add("person");        objectClass.add("organizationalPerson");        objectClass.add("inetOrgPerson");        user.put("sn", uid);        try {            serverContext.createSubcontext("uid=" + uid + ",ou=people", user);        } catch (NameAlreadyBoundException ignore) {//            System.out.println(" user " + uid + " already exists.");        } catch (NamingException ne) {            System.err.println("Failed to create  user.");            ne.printStackTrace();        }    }    public Configuration getConfiguration() {        return cfg;    }    private void initConfiguration() throws NamingException {        // Create the partition for the acegi tests        MutablePartitionConfiguration acegiDit = new MutablePartitionConfiguration();        acegiDit.setName("acegisecurity");        acegiDit.setSuffix("dc=acegisecurity,dc=org");        BasicAttributes attributes = new BasicAttributes();        BasicAttribute objectClass = new BasicAttribute("objectClass");        objectClass.add("top");        objectClass.add("domain");        objectClass.add("extensibleObject");        attributes.put(objectClass);        acegiDit.setContextEntry(attributes);        Set indexedAttrs = new HashSet();        indexedAttrs.add("objectClass");        indexedAttrs.add("uid");        indexedAttrs.add("cn");        indexedAttrs.add("ou");        indexedAttrs.add("member");        acegiDit.setIndexedAttributes(indexedAttrs);        Set partitions = new HashSet();        partitions.add(acegiDit);        cfg.setContextPartitionConfigurations(partitions);    }    private void initTestData() {        createOu("ou=people");        createOu("ou=groups");        createOu("ou=subgroups,ou=groups");        createUser("bob", "Bob Hamilton", "bobspassword");        createUser("ben", "Ben Alex", "{SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ=");        String[] developers = new String[]{                "uid=ben,ou=people,dc=acegisecurity,dc=org", "uid=bob,ou=people,dc=acegisecurity,dc=org"        };        createGroup("developers", "ou=groups", "developer", developers);        createGroup("managers", "ou=groups", "manager", new String[]{developers[0]});        createGroup("submanagers", "ou=subgroups,ou=groups", "submanager", new String[]{developers[0]});    }    public static void main(String[] args) {        LdapTestServer server = new LdapTestServer();    }    private void startLdapServer() {        cfg = new MutableStartupConfiguration();        // Attempt to use the maven target directory for the apache ds store. Property is passed        // through surefire plugin setup in pom.xml.        String apacheWorkDir = System.getProperty("apacheDSWorkDir");        if (apacheWorkDir == null) {            apacheWorkDir = System.getProperty("java.io.tmpdir") + File.separator + "apacheds-work";        }        File workingDir = new File(apacheWorkDir);        // Delete any previous contents (often not compatible between apache-ds versions).        deleteDir(workingDir);        ((MutableStartupConfiguration) cfg).setWorkingDirectory(workingDir);        System.out.println("Ldap Server Working directory is " + workingDir.getAbsolutePath());        Properties env = new Properties();        env.setProperty(Context.PROVIDER_URL, "dc=acegisecurity,dc=org");        env.setProperty(Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName());        env.setProperty(Context.SECURITY_AUTHENTICATION, "simple");        env.setProperty(Context.SECURITY_PRINCIPAL, DefaultPartitionNexus.ADMIN_PRINCIPAL);        env.setProperty(Context.SECURITY_CREDENTIALS, DefaultPartitionNexus.ADMIN_PASSWORD);        try {            initConfiguration();            env.putAll(cfg.toJndiEnvironment());            serverContext = new InitialDirContext(env);        } catch (NamingException e) {            System.err.println("Failed to start Apache DS");            e.printStackTrace();        }    }    /**     * Recursively deletes a directory     */    private boolean deleteDir(File dir) {        if (dir.isDirectory()) {            String[] children = dir.list();            for (int i = 0; i < children.length; i++) {                boolean success = deleteDir(new File(dir, children[i]));                if (!success) {                    return false;                }            }        }        return dir.delete();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -