WebLogic JNDI 使用方法简介
参考资料
1: http://www.weblogic.com/docs/classdocs/API_jndi.html
2: BeaHOME\wlserver6.1\samples\examples\jndi
public static void main(String[] args) {
// Use weblogic test JNDI
// project include BeaHOME\wlserver6.1\lib\weblogic.jar
String bindingkey = "UserAccount";
Context initialContext = null;
try {
// 1 Create a Properties object and set properties appropriately
Properties props = new Properties();
// Take a look at BeaHOME\wlserver6.1\samples\examples\jndi
// 1.1
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
// 1.2
props.put(Context.PROVIDER_URL, "t3://localhost:7001");
// 2 Create the initial context from the properties we just created
initialContext = new InitialContext(props);
HashMap lst = new HashMap();
lst.put("enterprise_code", "600000");
lst.put("username", "S02888");
lst.put("password", "sysmex");
// Sometimes bind twice will cause NamingException
//initialContext.unbind(bindingkey);
try {
// binding is copy obj's value to server
initialContext.bind(bindingkey, lst);
} catch (NameAlreadyBoundException e) {
initialContext.rebind(bindingkey, lst);
}
// Look up the object. copy obj's value from server
Object obj = initialContext.lookup(bindingkey);
if (bindingkey.equals("")) {
System.out.println("Looked up the initial context");
} else {
System.out.println(bindingkey + " is bound to: " + obj);
}
} catch (NamingException e) {
System.out.println("NamingException msg = " + e.getMessage());
} finally {
if (initialContext != null) {
try {
initialContext.close();
} catch (NamingException e) {
System.out.println("Failed to close context due to: " + e);
}
}
}
}
用ACLs限制JNDI访问
给JNDI的访问加入权限限制.
1: 在 http://localhost:7001/console/ 中设置
Security--->ACLs Create a new ACL...
Name=weblogic.jndi.myapp // 这个myapp就是要限制的JNDI路径.
Permissions=lookup (first time)
Permissions=modify (secend time)
User=user1
if there is a error system has not "modify" permission
please add one line in filerealm.properties
acl.modify.weblogic.admin=Administrators
2: 代码中访问JNDI是要输入用户名 密码
static final String JNDI_PATH = "myapp";
public void bindUserData(
String sessid,
String enterpriseCode,
String userId,
String password) {
// Use weblogic test JNDI
// project include BeaHOME\wlserver6.1\lib\weblogic.jar
String bindingkey = sessid;
Context initialContext = null;
try {
// 1 Create a Properties object and set properties appropriately
Properties props = new Properties();
// Take a look at BeaHOME\wlserver6.1\samples\examples\jndi
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://localhost:7001");
// ユーザおよびパスワードを T3User にパッケージ化して、
// パスワードを確実に暗号化する
props.put(Context.SECURITY_CREDENTIALS, new T3User("user1", "psw1"));
// 2 Create the initial context from the properties we just created
initialContext = new InitialContext(props);
HashMap lst = new HashMap();
//lst.put("enterprise_code", "600000");
//lst.put("username", "S02888");
//lst.put("password", "sysmex");
lst.put("enterprise_code", enterpriseCode);
lst.put("username", userId);
lst.put("password", password);
try {
initialContext.createSubcontext(JNDI_PATH);
System.out.println("Subcontext 'myapp' created");
} catch (NameAlreadyBoundException e) {
// サブコンテキストがすでに存在している。
// 名前が同じオブジェクトにすでにバインドされている場合、
// WebLogic のコンテキストの実装で、この例外は送出されない。
System.out.println("Subcontext 'myapp' already exists;" + " continuing with existing subcontext");
}
initialContext.unbind(JNDI_PATH + "." + bindingkey);
// bind is copy obj's value to server
initialContext.bind(JNDI_PATH + "." + bindingkey, lst);
// Look up the object. copy obj's value from server
Object obj = initialContext.lookup(JNDI_PATH + "." + bindingkey);
if (bindingkey.equals("")) {
System.out.println("Looked up the initial context");
} else {
System.out.println(
JNDI_PATH + "." + bindingkey + " is bound to: " + obj);
}
} catch (NamingException e) {
System.out.println("NamingException msg = " + e.getMessage());
} finally {
if (initialContext != null) {
try {
initialContext.close();
} catch (NamingException e) {
System.out.println("Failed to close context due to: " + e);
}
}
}
}
// 补充:遍历所有元素
NamingEnumeration ne = initialContext.list("."); // 用句号表示根目录
while (ne.hasMoreElements()){
System.out.println(ne.next());
}