Java喚醒本地應用的兩種方法詳解
引言
作為一個后端同學,經常被安全的小伙伴盯上,找一找安全漏洞;除了常說的注入之外,還有比較嚇人的執(zhí)行遠程命令,喚醒本地應用程序等;然后有意思的問題就來了,寫了這么多年的代碼,好像還真沒有嘗試過用java來喚醒本地應用程序的
比如說一個最簡單的,打開本地的計算器,應該怎么搞?
接下來本文將介紹一下如何使用java打開本地應用,以及打開mac系統(tǒng)中特殊一點的處理方式(直白來說就是不同操作系統(tǒng),使用姿勢不一樣)
1. Runtime使用方式
主要是基于Runtime.getRuntime().exec()
來執(zhí)行shell命令,來打開應用
比如打開計算器
// win系統(tǒng) Runtime.getRuntime().exec("exec"); // mac系統(tǒng) Runtime.getRuntime().exec("open -n /Applications/Calculator.app")
從上面的傳參也可以看出兩者的區(qū)別,為什么mac會整一個 open -n
, 這個其實可以理解為在終端執(zhí)行命令,打開計算器
注意事項
對于mac系統(tǒng)而言,除了上面這種打開方式之外,還有下面這種姿勢
Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator")
在exec中指定計算器的路徑,有個很容易采的坑,直接寫成下面這種
Runtime.getRuntime().exec("/Applications/Calculator.app")
上面這個直接執(zhí)行之后會提示權限錯誤,其主要原因是mac系統(tǒng)的應用和win中的exe作為啟動方式不太一樣,對于mac而言,可以理解xxx.app
為一個目錄,真正執(zhí)行文件是內部的xxx/Contents/MacOS/xxx
2. ProcessBuilder使用方式
除了Runtime喚起之外,使用ProcessBuilder也屬于非常常見的case
// win new ProcessBuilder("exec").start() // mac 注意,使用下面這個,則傳參不能是 open -n xxx new ProcessBuilder("/Applications/Calculator.app/Contents/MacOS/Calculator").start()
使用上面這種姿勢,特別需要注意的是內部傳參不能是open -n
3. 小結
從上面介紹的方式來看,其實打開應用程序的思路主要就是利用java來執(zhí)行腳本命令;內容比較簡單,隱患卻是比較大的;在自己的項目中,最好不要出現(xiàn)這種調用方式
以上就是Java喚醒本地應用的兩種方法詳解的詳細內容,更多關于Java喚醒本地應用的資料請關注腳本之家其它相關文章!
相關文章
詳解Java如何優(yōu)雅的調用dubbo同時不使用其它jar包
這篇文章主要介紹了如何在不使用他人jar包的情況下優(yōu)雅的進行dubbo調用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-02-02基于SpringBoot實現(xiàn)自定義插件的流程詳解
在SpringBoot中,插件是一種擴展機制,它可以幫助我們在應用程序中快速地添加一些額外的功能,在本文中,我們將介紹如何使用 SpringBoot實現(xiàn)自定義插件,需要的朋友可以參考下2023-06-06