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

📄 altclient.java

📁 weblogic应用全实例
💻 JAVA
字号:
//声明本接口所在的包
package examples.security.acl;
//声明本类引入的其他类
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.naming.Context;
import weblogic.jndi.Environment;
import weblogic.security.PEMInputStream;
import weblogic.security.X509;
import weblogic.security.acl.DefaultUserInfoImpl;


/** 
 * 以给定的用户名调用RMI。
 *
 * 这个和Client例程不同在两个方面:
 * 
 *
 * 使用环境参数建立初始化JNDI上下文;
 *它试图执行两种方式的认证,如果客户端私有密钥和认证允许的情况下。
 *
 *
 */
public class AltClient
{
  /** 
   * 主方法:检查参数,查找远程对象frobtarget,调用frob方法,打印结果
   */
  public static void main(String[] args)
  {
    Context ctx = null;
    
    if (args.length < 1)
    {
      //打印用法提示	
      usage();
    }

    String url = args[0];
    
    try
    {
      //JNDI环境	
      Environment env = new Environment();
      //设置url
      env.setProviderUrl(url);

      // 如果显示给定用户名和密码,使用它们,否则为guest/guest.

      String user = null;
      
      //下面解析命令行参数     
      for (int arg = 1; arg < args.length; arg++)
      {
      	//用户名
        if (args[arg].equals("-user") && arg + 1 < args.length)
        {
          env.setSecurityPrincipal(user = args[++arg]);
        }
        //密码
        else if (args[arg].equals("-pass") && arg + 1 < args.length)
        {
          env.setSecurityCredentials(args[++arg]);
        }
        //ssl客户端
        else if (args[arg].equals("-sslCert") && arg + 1 < args.length)
        {

          InputStream[] certs = readCerts(args[++arg]);

          if (url.startsWith("t3s") || url.startsWith("https"))
          {
            env.setSSLClientCertificate(certs);
          } else {
            fatal("the URL doesn't specify use of SSL");
          }
        }
        //服务器名
        else if (args[arg].equals("-servername") && arg + 1 < args.length)
        {
          if (url.startsWith("t3s") || url.startsWith("https"))
          {
            env.setSSLServerName(args[++arg]);
          } else {
            fatal("the URL doesn't specify use of SSL");
          }

    	}
    	//密钥
        else if (args[arg].equals("-keypass") && arg + 1 < args.length)
        {
          if (url.startsWith("t3s") || url.startsWith("https"))
          {
            env.setSSLClientKeyPassword(args[++arg]);
          } else {
            fatal("the URL doesn't specify use of SSL");
          }
        }
        //证书
        else if (args[arg].equals("-cert") && arg + 1 < args.length)
        {
          if (user == null)
          {
            fatal("user name must be specified before certificate chain");
          }
          
          InputStream[] certs = readCerts(args[++arg]);
          X509[] x509 = new X509[certs.length];

          for (int i = 0; i < certs.length; i++)
          {
            x509[i] = new X509(certs[i]);
          }

          env.setSecurityCredentials(new DefaultUserInfoImpl(user, x509));
        } else {
          usage();
        }
      }
      //获取初始化上下文 
      ctx = env.getInitialContext();
      //查找远程对象
      Frobable f = (Frobable) ctx.lookup("frobtarget");
      //运行远程方法
      f.frob();
      System.out.println("Frobbed successfully");
    }
    catch (Throwable t)
    {
      t.printStackTrace();
      System.out.println("Failed to frob");
    }
    finally
    {
      try
      {
        if (ctx != null)
        {
          ctx.close();
        }
      }
      catch (Exception e)
      {
        // 处理任何失败
      }
    }
  }

  //定义分隔符
  private static final String pathSep =
    (String) System.getProperty("path.separator", ":");

  //读文件
  private static InputStream[] readCerts(String files)
    throws IOException
  {
    Vector inputStreams = new Vector();

    StringTokenizer toks = new StringTokenizer(files, pathSep);


    int num_files = toks.countTokens();
    for (int i = 0; i < num_files; i++)
    {
      String file = toks.nextToken();

      //创建文件流
      InputStream is = new FileInputStream(file);

      if (file.toLowerCase().endsWith(".pem")) {
      	//读文件
        while ( is.available() > 64 ) {
          PEMInputStream pis = new PEMInputStream(is);
          inputStreams.addElement(pis);
        }
      } else {
        inputStreams.addElement(is);
      }

    } // 循环结束

    
    InputStream streams[] = new InputStream[inputStreams.size()];
    for (int i = 0; i < inputStreams.size(); i++ ) {
      streams[i] = (InputStream)inputStreams.elementAt(i);
    }
    
    return streams;
  }
  //致命错误
  private static void fatal(String msg)
  {
    System.err.println("Error: " + msg);
    System.exit(1);
  }

  //打印用法
  private static void usage()
  {
    System.err.println("Usage:\tjava examples.security.acl.AltClient " +
        	       "URL [-user username]");
    System.err.println("\t[-pass password] [-cert cert1" + pathSep + "cert2" +
        	       pathSep + "...]");
    System.err.println("\t[-servername hostnameincert] [-sslCert key" + pathSep + "cert1" +
        	       pathSep + "... [-keypass privatekeypassword] ]");
    System.err.println("e.g.:\tjava examples.security.acl.AltClient " +
        	       "t3s://localhost:7002 -user guest -pass guest -servername myhost.com");
    System.exit(1);
  }
}

⌨️ 快捷键说明

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