意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分

最近研发BDC 云开发部署平台的数据路由及服务管理器 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分享!

最近研发BDC 云开发部署平台的数据路由及服务管理器
意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码!
http://pan.baidu.com/share/link?shareid=2118966359&uk=201606611
不敢藏私,特与大家分享!


部分代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using org.mozilla.javascript;

using javax.net;


//org.mozilla.javascript包:该包内的对象是实现javascript的主要对象。

//org.mozilla.javascript.ast包:rhino中语法分析器生成的ast表示类都在该包内。

//org.mozilla.javascript.debug包:该包实现了javascript的debug功能。

//org.mozilla.javascript.optimizer包:该包实现了javascipt生成代码的代码优化。

//org.mozilla.javascript.regexp包:该包实现了javascript正侧表达式的功能。


namespace javascriptServer

{

    class MainClass

    {

        private const string script =

            @"

            var swingNames = JavaImporter();

            swingNames.importPackage(Packages.java.lang); 

            swingNames.importPackage(java.io);

            swingNames.importPackage(Packages.System);

            swingNames.importPackage(Packages.System.Text);

            swingNames.importPackage(Packages.TestRhino);

            //swingNames.importClass(ClassLibrary.dll);

            function Add()

            {

                return '123';

            }


            function foo(me)

            {

                return fromCSharp(me) + me + ""!!!"";

            }

            


            function output(str)

            {

                return str + ""结果"";

            }

            

            var str = foo(2000);

            PrintLn(str);

            java.lang.System.out.println('测试调用 javascript 系统函数');


            var hello = Hello.getInstance();

            var sh = Hello.sHello();

            PrintLn(sh);

            ";


        public static java.lang.Integer FromCSharp(java.lang.Integer i) //, java.lang.Integer j)

        {

            return i; // string.Format("  {0} the ", i); //, j);

        }


        public static void PrintLn(String s) //, java.lang.Integer j)

        {

            //return i; // string.Format("  {0} the ", i); //, j);

            Console.WriteLine(s);

            return;

        }


        public static void Main(string[] args)

        {

            Context cx = Context.enter();  //获取环境设置


            //cx.setClassShutter(new ClassShutter());

            Scriptable scope = cx.initStandardObjects(); //初始化本地对象


            //scope.put("x", scope, new java.lang.Integer(20));    //输入参数设置  


            Hello hello = new Hello();

            scope.put("Hello", scope, hello);  // typeof(Hello)); // 对象放入全局对象中


            ContextFactory cf = new ContextFactory();


            //注册 c# 方法

            java.lang.Class myJClass = typeof(MainClass);

            java.lang.reflect.Member method = myJClass.getMethod("FromCSharp", typeof(java.lang.Integer)); //new java.lang.Class[] { typeof(java.lang.Integer) }); //, typeof(java.lang.Integer) });

            Scriptable function = new FunctionObject("fromCSharp", method, scope);

            scope.put("fromCSharp", scope, function);


            method = myJClass.getMethod("PrintLn", typeof(java.lang.String)); //new java.lang.Class[] { typeof(java.lang.Integer) }); //, typeof(java.lang.Integer) });

            function = new FunctionObject("PrintLn", method, scope);

            scope.put("PrintLn", scope, function);


            int ix = 1; int iy = 2;


            


            //执行脚本

            cx.evaluateString(scope, script, "myjs", 1, null);

            //Console.WriteLine("从执行结果中获取结果"+ scope.get("result", scope));     //结果输出

            //编译脚本

            Script s = cx.compileString(script, "myjs", 1, null);

            s.exec(cx, scope);


            ScriptableObject.putProperty(scope, "ix", ix);

            ScriptableObject.putProperty(scope, "iy", iy);



            object fooFunctionObj = scope.get("foo", scope);

                        

            if (!(fooFunctionObj is Function))

                Console.WriteLine("foo 不是函数");

            else

            {

                Function fooFunction = (Function)fooFunctionObj;

                //调用 js 方法

                object result = fooFunction.call(cx, scope, scope, new object[] { new java.lang.Integer(100) });


                Console.WriteLine(result);

            }


            Console.ReadLine();

        }


        /// <summary>


        /// 实现类在javascript中使用的安全性验证

        /// </summary>

        private class ClassShutter : org.mozilla.javascript.ClassShutter

        {

            public bool visibleToScripts(string str)

            {

                Console.WriteLine("类在javascript中被使用: {0}", str);

                return false;

            }

        }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值