posts - 56, comments - 54, trackbacks - 0, articles - 4
   ::  ::  :: 联系 :: 聚合  :: 管理

WebLogic JNDI 使用方法简介

Posted on 2005-11-16 10:37 Terry的Blog 阅读(5030) 评论(1)  编辑  收藏 所属分类: Java应用服务器

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());  
}
 
 


评论

# re: WebLogic JNDI 使用方法简介  回复  更多评论   

2011-04-26 11:54 by zcq87642231
このやろう。 それは日本に向けのプロージェックトじゃん。

只有注册用户登录后才能发表评论。


网站导航: