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

📄 frobimpl.java

📁 weblogic应用全实例
💻 JAVA
字号:
//声明本接口所在的包
package examples.security.acl;
//声明本类引入的其他类
import java.security.acl.Acl;
import java.security.acl.Permission;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import weblogic.rmi.RemoteException;
import weblogic.security.acl.BasicRealm;
import weblogic.security.acl.Realm;
import weblogic.security.acl.Security;
import weblogic.security.acl.User;
import weblogic.security.audit.Audit;

/**
 * 类 FrobImpl 演示怎样使用一个ACL保护一个RMI对象方法。
 *
 */
public class FrobImpl implements Frobable {
  //定义ACL名
  final static String ACL_NAME = "aclexample";
  //定义许可名
  final static String PERMISSION_NAME = "frob";
  //定义域名
  final static String REALM_NAME = "weblogic";

  /**
   * 演示两种方法检查访问RMI对象的许可
   */
  public void frob() throws RemoteException {

    // 对于weblogic中的ACLs,可以使用Security的静态方法
    Security.checkPermission("Frob",
			     Security.getCurrentUser(), 
			     ACL_NAME, 
			     Security.getRealm().getPermission(PERMISSION_NAME),
			     '.');

    // 获取当前用户
    User p = Security.getCurrentUser();
    // 获取当前域
    BasicRealm realm = Realm.getRealm(REALM_NAME);
    // 获取Acl
    Acl acl = realm.getAcl(ACL_NAME);
    // 获取许可
    Permission perm = realm.getPermission(PERMISSION_NAME);
    // 检验结果
    boolean result = acl == null || !acl.checkPermission(p, perm);
    // 检查许可
    Audit.checkPermission("Frob", acl, p, perm, !result);
    
    if (result) {
      //禁止当前用户访问
      Security.logAndThrow(PERMISSION_NAME + " denied for user " + p);
    }
    System.out.println("User " + p + " frobbed successfully");
  }    
  
  /**
   * 主方法,创建FrobImpl实例并以frob target为名称绑定到JNDI树
   */
  public static void main(String args[]) {
    Context ctx = null;
    try {
      //获取上下文	
      Hashtable env = new Hashtable();
      env.put(Context.INITIAL_CONTEXT_FACTORY,
              "weblogic.jndi.WLInitialContextFactory");
      ctx = new InitialContext(env);
      //创建FrobImpl实例并以frob target为名称绑定到JNDI树
      ctx.bind("frobtarget", new FrobImpl());
    }
    catch (Throwable t) {
      t.printStackTrace();
    }
    finally {
      try {ctx.close();}
      catch (Exception e) {
        // 处理任何失败
      }
    }
  }
}

⌨️ 快捷键说明

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