简体   繁体   English

我可以在java中使用来自服务器回调的javascript函数吗?

[英]Can I use javascript function from server callback in java?

I am making some java project about non-using browser service. 我正在制作一些关于非使用浏览器服务的java项目。

So, I want to use some JavaScript function from server (which is a callback from my POST) 所以,我想从服务器使用一些JavaScript函数(这是我的POST回调)

I saw many codes about using JavaScript in java, but it's from local files. 我看到很多关于在java中使用JavaScript的代码,但是它来自本地文件。

I think one solution about this: 我认为有一个解决方案:

When callback is coming, save this code and use it again. 回调即将来临时,请保存此代码并再次使用。 But I think it's not optimal for our project. 但我认为这不是我们项目的最佳选择。

Can you give me any other solution? 你能给我任何其他解决方案吗?

Thank you in advance. 先感谢您。

Yes, you can, as @Daniel Baranowski suggested above. 是的,你可以像@Daniel Baranowski上面所说的那样。
And no, you absolutely shouldn't. 不,你绝对不应该。
Running any code submitted by the client is putting yourself in an extreme risk. 运行客户提交的任何代码会让您面临极大的风险。
Can it access your filesystem? 它可以访问您的文件系统吗? Then you're in trouble. 那你就麻烦了。
Can it execute network calls? 它可以执行网络呼叫吗? Then you're also in trouble. 那你也遇到了麻烦。
And even if you blocked those options, do you check that this user code terminates in time? 即使您阻止了这些选项,您是否检查此用户代码是否会及时终止?

It is certainly possible but it can expose you to huge security risks . 它当然是可能的,但它可能会给您带来巨大的安全风险

Nothing is stopping you from running JavaScript code directly from a String. 没有什么能阻止您直接从String运行JavaScript代码。 Having it saved in a file is not a requirement. 将其保存在文件中不是必需的。 You can get the body of the POST which was send do your server and execute it somewhat like this: 您可以获取发送的POST的主体执行您的服务器并执行它有点像这样:

 package example;

        import jdk.nashorn.api.scripting.JSObject;
        import jdk.nashorn.api.scripting.NashornScriptEngine;    
        import javax.script.ScriptEngineManager;
        import javax.script.ScriptException;

        public class Example {
            private final ThreadLocal<NashornScriptEngine> engineHolder;

            public Example() {
                // You don't need to run code from files. The code can be a string which was posted to your server.
                String jsCodeToRun = "function helloWorld(name) { return { value: 'Hello' + name } }"

                this.engineHolder = ThreadLocal.withInitial(() -> {
                    NashornScriptEngine nashornScriptEngine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
                    try {
                        nashornScriptEngine.eval(jsCodeToRun);
                    } catch (ScriptException e) {
                        throw new RuntimeException(e);
                    }
                    return nashornScriptEngine;
                });
            }

           public JSObject runTheCode(String name) {
              try {
                JSObject result = (JSObject) engineHolder.get().invokeFunction("helloWorld", name);

                // The result will be an object returned by our helloWorld function.
                return result;
            } catch (Exception e) {
                throw new IllegalStateException(e);
            }
        }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何编写从服务器端 JavaScript 调用的 Java 方法,该方法将 JS 回调函数作为参数? - How do I write a Java method, to be called from server side JavaScript, that takes a JS callback function as an argument? 如何在另一个函数中使用Ajax的回调函数 - How can I use callback function from ajax in another function 当我可以直接调用一个函数时,为什么在 javascript 中使用回调函数 - why use callback function in javascript when I can invoke directly a function 如何将javaScript函数传递给Java方法以充当回调(Rhino) - How can I pass a javaScript function to a Java Method to act as a callback (Rhino) 如何从回调之外的回调函数访问值? - How can I access a value from callback function outside of the callback? 如何在另一个函数的回调中调用JavaScript函数? - How can I call a JavaScript function in a callback of another function? Javascript / Coffeescript:我可以将变量从当前上下文传递给回调函数吗? - Javascript / Coffeescript: Can I pass a variable from current context to a callback function? 如何从C#主机应用程序执行Javascript回调函数 - How can I execute Javascript callback function from C# host application 如何在JavaScript中使用回调函数? - How to use callback function in javascript? 如何在JavaScript中使用回调函数 - How to use callback function in javascript
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM