亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以在java中使用來自服務器回調的javascript函數嗎?

我可以在java中使用來自服務器回調的javascript函數嗎?

白衣非少年 2021-07-13 13:13:01
我正在制作一些關于不使用瀏覽器服務的 Java 項目。所以,我想使用來自服務器的一些 JavaScript 函數(這是我的 POST 的回調)我看到很多關于在 Java 中使用 JavaScript 的代碼,但它來自本地文件。我想一個解決方案:當回調即將到來時,保存此代碼并再次使用它。但我認為這對我們的項目來說不是最佳的。你能給我任何其他解決方案嗎?先感謝您。
查看完整描述

2 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

是的,你可以,正如@Daniel Baranowski 上面建議的那樣。
不,你絕對不應該。
運行客戶提交的任何代碼都會使您面臨極大的風險。
它可以訪問您的文件系統嗎?那你就麻煩了。
它可以執行網絡調用嗎?那你也有麻煩了。
即使您阻止了這些選項,您是否檢查此用戶代碼是否及時終止?

查看完整回答
反對 回復 2021-07-23
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

這當然是可能的,但它會使您面臨巨大的安全風險。


沒有什么能阻止您直接從 String 運行 JavaScript 代碼。將其保存在文件中不是必需的。您可以獲取發送到您的服務器的 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);

            }

        }

        }


查看完整回答
反對 回復 2021-07-23
  • 2 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號