📄 frobimpl.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 + -