Java “我的所有类”的“仅用户”定义

Java “我的所有类”的“仅用户”定义,java,Java,我需要java类的帮助。我正在做一个有很多类的项目,这些类必须连接到我服务器的LDAP。在每个类中,我必须指定importjavax,即绑定到LDAP服务器的上下文。有一种方法可以只在一个类中指定javax和context,而在所有其他类上调用这个javax和context,而无需每次重写 我只想为我的所有类指定一次javax、hastable和env.put的导入部分: package ldapUserManagement; import javax.naming.*; import ja

我需要java类的帮助。我正在做一个有很多类的项目,这些类必须连接到我服务器的LDAP。在每个类中,我必须指定importjavax,即绑定到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

感谢你用一个清晰的例子来回答


谢谢你的快速帮助

对哈希表使用静态变量


您将始终能够通过用户访问它。getEnv

您可以使用HashMap options=newhashmap;看看我的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();
   }

}

该示例应该包含一个方法,以便外部类可以访问字段OP中提到的许多类:publicstatichashtable getEnv{returntable;}
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();
   }

}