这篇文章主要为大家介绍了Java唤醒本地应用的两种方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
引言
作为一个后端同学,经常被安全的小伙伴盯上,找一找安全漏洞;除了常说的注入之外,还有比较吓人的执行远程命令,唤醒本地应用程序等;然后有意思的问题就来了,写了这么多年的代码,好像还真没有尝试过用java来唤醒本地应用程序的
比如说一个最简单的,打开本地的计算器,应该怎么搞?
接下来本文将介绍一下如何使用java打开本地应用,以及打开mac系统中特殊一点的处理方式(直白来说就是不同操作系统,使用姿势不一样)
1. Runtime使用方式
主要是基于Runtime.getRuntime().exec()
来执行shell命令,来打开应用
比如打开计算器
// win系统
Runtime.getRuntime().exec("exec");
// mac系统
Runtime.getRuntime().exec("open -n /Applications/Calculator.app")
从上面的传参也可以看出两者的区别,为什么mac会整一个 open -n
, 这个其实可以理解为在终端执行命令,打开计算器
注意事项
对于mac系统而言,除了上面这种打开方式之外,还有下面这种姿势
Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator")
在exec中指定计算器的路径,有个很容易采的坑,直接写成下面这种
Runtime.getRuntime().exec("/Applications/Calculator.app")
上面这个直接执行之后会提示权限错误,其主要原因是mac系统的应用和win中的exe作为启动方式不太一样,对于mac而言,可以理解xxx.app
为一个目录,真正执行文件是内部的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来执行脚本命令;内容比较简单,隐患却是比较大的;在自己的项目中,最好不要出现这种调用方式
以上就是Java唤醒本地应用的两种方法详解的详细内容,更多关于Java唤醒本地应用的资料请关注编程学习网其它相关文章!
本文标题为:Java唤醒本地应用的两种方法详解
基础教程推荐
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java文件管理操作的知识点整理 2023-05-19
- java基础知识之FileInputStream流的使用 2023-08-11
- Java实现查找文件和替换文件内容 2023-04-06
- Java数据结构之对象比较详解 2023-03-07
- springboot自定义starter方法及注解实例 2023-03-31
- java实现多人聊天系统 2023-05-19
- Java实现线程插队的示例代码 2022-09-03
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java并发编程进阶之线程控制篇 2023-03-07