Java唤醒本地应用的两种方法详解

 更新时间:2022年08月09日 10:31:00   作者:一灰灰  
这篇文章主要为大家介绍了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唤醒本地应用的资料请关注脚本之家其它相关文章!

相关文章

  • IDEA2022搭建Spring Cloud多模块项目的详细过程

    IDEA2022搭建Spring Cloud多模块项目的详细过程

    这篇文章主要介绍了IDEA2022搭建Spring Cloud多模块项目,网上有很多教程父模块都是通过maven的方式创建的,然后子模块是通过Spring Initalizr方式创建,这种方式父模块无法管理子模块的依赖仲裁,需要每个子模块自行管理,就失去了父模块的用处了
    2022-10-10
  • SpringBoot中EasyExcel实现Excel文件的导入导出

    SpringBoot中EasyExcel实现Excel文件的导入导出

    这篇文章主要介绍了SpringBoot中EasyExcel实现Excel文件的导入导出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • SpringSecurity实现自定义登录接口的详细过程

    SpringSecurity实现自定义登录接口的详细过程

    本文详细介绍了如何使用SpringSecurity实现自定义登录接口,文章还涉及了对用户实体类的增强以满足详细信息的需求,适合需要深入了解和实现SpringSecurity自定义登录功能的开发者,感兴趣的朋友跟随小编一起看看吧
    2024-10-10
  • Spring框架基于AOP实现简单日志管理步骤解析

    Spring框架基于AOP实现简单日志管理步骤解析

    这篇文章主要介绍了Spring框架基于AOP实现简单日志管理步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

    MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

    本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化 MyBatis 配置,提升开发效率,确保 SQL 的高效执行和安全性,感兴趣的朋友跟随小编一起看看吧
    2025-04-04
  • java 8如何自定义收集器(collector)详解

    java 8如何自定义收集器(collector)详解

    这篇文章主要给大家介绍了关于java 8如何自定义收集器(collector)的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • SpringBoot+RabbitMQ 实现死信队列的示例

    SpringBoot+RabbitMQ 实现死信队列的示例

    本文主要介绍了SpringBoot+RabbitMQ 实现死信队列的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 教你用JAVA写文本编辑器(一)

    教你用JAVA写文本编辑器(一)

    对于学习java编程的小伙伴们,常常需要编写一个类似文本编辑器的东西,下面这篇文章主要给大家介绍了关于如何用JAVA写文本编辑器的相关资料,需要的朋友可以参考下
    2021-11-11
  • 从面试中的问题分析ThreadLocal

    从面试中的问题分析ThreadLocal

    这篇文章主要介绍了从面试中的问题分析ThreadLocal,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们来一起学习一下吧
    2019-06-06
  • Spring Cloud Config配置文件使用对称加密的方法

    Spring Cloud Config配置文件使用对称加密的方法

    Spring Cloud Config提供了两种加密解密方式,一种是对称加密,一种是非对称加密。这篇文章将先展示如何使用对称加密。感兴趣的朋友跟随脚步之家小编一起学习吧
    2018-05-05

最新评论