用户只对我所有班级的定义

时间:2012-12-08 21:33:00

标签: java

我需要java类的帮助。我正在做一个有许多类的项目,必须连接到我的服务器的LDAP。在每个类中,我必须指定import javax,即绑定到LDAP服务器的上下文。有一种方法只在一个类中指定javax和context,而在所有其他类中调用这个javax和context而不重写每一个?

我想只指定一次为我的所有类导入javax,hastable和env.put的部分:

package ldapUserManagement;


import javax.naming.*;
import javax.naming.directory.*;

import java.util.Hashtable;
import java.util.List;

public class Usagers
{

    private static final String String = null;
    private static Context result;

    public static void main(String[] args) 
    {

    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

    env.put(Context.PROVIDER_URL, "ldap://192.168.0.5:389/dc=java,dc=local");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "java\\administrator");
        env.put(Context.SECURITY_CREDENTIALS, "*password*");
        env.put("java.naming.ldap.deleteRDN", "true");  


    try {...

我的目标是只在一个地方指定管理员凭据和javax导入

感谢回复一个明确的例子

感谢您的快速帮助!

2 个答案:

答案 0 :(得分:0)

Hashtable

使用静态变量
import javax.naming.*;

import java.util.Hashtable;

public class Usagers {

    private static Hashtable table = init();

    public static final Hashtable getEnv() {
        return table;
    }

    private static Hashtable init() {
        Hashtable env = new Hashtable();
        table.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        table.put(Context.PROVIDER_URL, "ldap://192.168.0.5:389/dc=java,dc=local");
        table.put(Context.SECURITY_AUTHENTICATION, "simple");
        table.put(Context.SECURITY_PRINCIPAL, "java\\administrator");
        table.put(Context.SECURITY_CREDENTIALS, "*password*");
        table.put("java.naming.ldap.deleteRDN", "true");

        return env;
    }
}

您将始终可以使用Usagers.getEnv()

访问它

答案 1 :(得分:0)

你可以使用HashMap options = new HashMap();看看我的ldap测试连接

package com.company.project.test;

import java.lang.reflect.Method;
import java.security.acl.Group;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import javax.security.auth.Subject;
import javax.security.auth.login.AppConfigurationEntry;
import javax.security.auth.login.Configuration;
import javax.security.auth.login.LoginContext;

import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.jboss.security.SimplePrincipal;
import org.jboss.security.auth.callback.UsernamePasswordHandler;
import org.junit.Ignore;
import org.junit.Test;

/** Tests of the LoginModule classes.
 */
public class LoginModulesTestCase extends TestCase
{
   static
   {
      try
      {
         Configuration.setConfiguration(new TestConfig());
         System.out.println("Installed TestConfig as JAAS Configuration");
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
   }
   /** Hard coded login configurations for the test cases. The configuration
    name corresponds to the unit test function that uses the configuration.
    */
   static class TestConfig extends Configuration
   {
      public void refresh()
      {
      }

      public AppConfigurationEntry[] getAppConfigurationEntry(String name)
      {
         AppConfigurationEntry[] entry = null;
         try
         {
            Class[] parameterTypes = {};
            Method m = getClass().getDeclaredMethod(name, parameterTypes);
            Object[] args = {};
            entry = (AppConfigurationEntry[]) m.invoke(this, args);
         }
         catch(Exception e)
         {
         }
         return entry;
      }

      AppConfigurationEntry[] testLdapExample1()
      {
         String name = "org.jboss.security.auth.spi.LdapLoginModule";
         HashMap options = new HashMap();
         options.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
         options.put("java.naming.provider.url", "ldap://127.0.0.1:10389/");
         options.put("java.naming.security.authentication", "simple");
         options.put("principalDNPrefix", "uid=");
         options.put("principalDNSuffix", ",ou=users,o=myorg");         
         options.put("rolesCtxDN", "ou=groups,o=myorg");
         options.put("uidAttributeID", "member");
         options.put("matchOnUserDN", "true");
         options.put("roleAttributeID", "cn");
         options.put("roleAttributeIsDN", "false");
         AppConfigurationEntry ace = new AppConfigurationEntry(name,
         AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, options);
         AppConfigurationEntry[] entry = {ace};
         return entry;
      }
   }

   public LoginModulesTestCase(String testName)
   {
      super(testName);
   }

   @Test
   public void testLdapExample1() throws Exception
   {
      System.out.println("testLdapExample1");
      UsernamePasswordHandler handler = new UsernamePasswordHandler("nameuser", "passduser".toCharArray());
      LoginContext lc = new LoginContext("testLdapExample1", handler);
      lc.login();

      Subject subject = lc.getSubject();
      System.out.println("Subject: "+subject);

      Set groups = subject.getPrincipals(Group.class);
      assertTrue("Principals contains nameuser", subject.getPrincipals().contains(new SimplePrincipal("nameuser")));
      Group roles = (Group) groups.iterator().next();
      assertTrue("admin is a role", roles.isMember(new SimplePrincipal("admin")));

      lc.logout();
   }

}