首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏有困难要上,没有困难创造困难也要上!

    Java 中使用 JavaScript Nashorn 引擎

    Nashorn 介绍 Nashorn 是 Java 8 中引入的 JavaScript 引擎,它允许在 Java 应用程序中嵌入和执行 JavaScript 代码。 但是在JDK 15 中,Nashorn 已经被移除,取而代之的是新的 JavaScript 引擎,即 GraalJS。如果要继续使用 Nashorn,需要引入相应的依赖。 <dependency> <groupId>org.openjdk.nashorn</groupId> <artifactId>nashorn-core</artifactId> <version dependency> hello world 准备javascript文件,内容如下: var greeting='hello world'; print(greeting); 在Java 中使用 Nashorn 在Java 中使用 Nashorn 引擎执行这个文件,其中使用 Bindings 传递了name参数,然后获取返回值: import org.apache.commons.io.FileUtils;

    82310编辑于 2024-10-10
  • 来自专栏Java小技巧

    Java 8 新特性|Nashorn JavaScript

    一、前言 对于 Java 中的 JavaScript 引擎, Java 8 引入了 Nashorn 来代替原先的 Rhino。 Nashorn 使用 Java 7 中引入的调用动态特性,且直接编译内存中的代码并将字节码传递给 JVM。这两项改进,直接给 Nashorn 带了至少 2 到 10 倍的性能提升。 二、JJS使用方式 在 Nashorn JavaScript 引擎中。JAVA 8 引入了一个新的命令行工具 jjs,用于在控制台执行 javascript 代码。 ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn"); String name = "二哥!" result = (Integer) nashorn.eval("8 + 2 * 2"); } catch(ScriptException e) { //执行

    1.2K20编辑于 2022-05-23
  • 来自专栏Nicky's blog

    JDK8系列之JavaScript引擎Nashorn

    从JDK1.8开始,Java采用Nashorn作为嵌入式 JavaScript 引擎。JDK1.6和JDK1.7采用Rhino。 Nashorn 支持 ECMAScript 5.1 规范,使用基于 JSR 292 的新语言特性,其中包含在 JDK 7 中引入的 invokedynamic,将 JavaScript 编译成 Java 下面给出一些例子加深理解,一个最简单的例子,调用1+2,计算输出打印 package com.example.jdkexample.core.nashorn; import javax.script.ScriptEngine

    1.9K30编辑于 2022-09-21
  • 来自专栏离别歌 - 信息安全与代码审计

    Nashorn失去括号:非典型Java命令执行绕过

    简单来说就是,在Java的Nashorn脚本中,如果不允许使用小括号(、)和中括号[、],如何执行任意命令? 0x01 浏览器JavaScript无括号XSS 我们知道,Nashorn脚本本质上是JavaScript,而无括号的XSS Payload其实是一个老问题了。 但是,虽然都是JavaScript,但浏览器里的这些方法并不能套用到Nashorn中: 一是Nashorn并不支持ES6语法,二是其中没有DOM相关方法,三是上下文中也没有全局对象可以注册onerror 既然JavaScript里的方法不能直接利用,我们还是需要回到Nashorn和Java中找方法。 0x03 Nashorn与Java接口、抽象类的利用 当然,Fastjson各个利用链都有自己的不足,有的需要连接外网,有的有Java版本限制,有的只能写文件,有的依赖第三方库。

    57810编辑于 2024-04-13
  • 来自专栏Java成神之路

    Java_脚本引擎_03_nashorn支持es6

    一、前言 jdk1.8的nashorn 支持部分es6语法。

    1.8K10发布于 2018-09-20
  • 来自专栏Java成神之路

    Java_脚本引擎_02_在Idea中进行Nashorn的Debug

    一、前言 本文承接上一节:Java_脚本引擎_01_用法入门 这一节我们来看下怎么在idea中进行Nashorn的Debug ,又或者说怎么在Idea中进行js的Debug 注:idea本身就支持js的 scriptEngineManager = new ScriptEngineManager(); ScriptEngine engine = scriptEngineManager.getEngineByName("nashorn

    1.3K40发布于 2018-08-10
  • 来自专栏用户10106051的专栏

    Nashorn在Hello出行物联网平台下的实践与性能调优

    用JS作为规则脚本我们需要做到JS能调用后端API接口,API接口能调用JS本地方法,经过多次技术调研,我们选择了JDK1.8的Nashorn引擎来作为最终落地方案。 这里我简单介绍一下Nashorn相关知识,方便大家了解它是什么,能用来解决什么问题? Nashorn简介 Nashorn是一个以Java编程语言开发的JavaScript 引擎,最初由Oracle开发,后来由 OpenJDK 社区开发。 从 JDK 8 开始, Nashorn 取代 Rhino 成为 Java 的嵌入式 JavaScript 引擎。Nashorn 完全支持 ECMAScript 5.1 规范以及一些扩展。 所以每次的设备消息,都需要经过Nashorn根据指定的规则(提前配置好的规则脚本)作为前置判断,我们线上接口QPS大概有1W+。

    1.4K20编辑于 2022-10-28
  • 来自专栏安全学习

    CVE-2017-9805 S2-052远程代码执行漏洞

    > <jdk.nashorn.internal.objects.NativeString reference=".. /jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString /entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference /jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString /entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference

    81330编辑于 2022-12-08
  • 来自专栏安全学习

    CVE-2017-9805 S2-052远程代码执行漏洞

    > <jdk.nashorn.internal.objects.NativeString reference=".. /jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString /entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference /jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString /entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference

    62510编辑于 2022-12-22
  • 来自专栏前端博客

    JS引擎(2):Java平台上JavaScript引擎—Rhino/Nashorn概述

    可以后端开发的 javascript引擎有 Chrome V8 基于C++ java的Rhino引擎(JDK6被植入),Java8 被替换为Nashorn Rhino和Nashorn都是用Java实现的 Nashorn Nashorn(读作Naz-horn[naːsˌɔn])是Oracle全新开发的JavaScript实现。高度兼容ECMAScript 5标准,并尽可能兼容Rhino。 代码: http://hg.openjdk.java.net/nashorn/jdk8/nashorn 代码版本控制工具: Mercurial 开源许可证: GPLv2 Nashorn是一个纯编译的JavaScript 所以Nashorn在实际运行中可能需要一定预热才会达到最高速度) Nashorn不但可以执行JavaScript,还可以当作库为其它工具提供一些基础服务。 安装后可以在JDK安装目录的jre/lib/ext/nashorn.jar找到Nashorn的实现。

    4.2K10编辑于 2023-04-09
  • 来自专栏开源物联网平台开发

    liteflow规则引擎 执行Javascript脚本

    一个常见的选择是使用Nashorn引擎,它是Java 8引入的一个JavaScript引擎。 以下是一个简单的示例,演示如何在LiteFlow中使用Nashorn引擎执行JavaScript脚本: 添加LiteFlow和Nashorn依赖:确保你的项目中包含LiteFlow的相关依赖,并添加Java 8的Nashorn引擎依赖。 引擎 ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn"); 请注意,Nashorn引擎在Java 11中被标记为已弃用,因此如果你使用的是Java 11或更高版本,你可能需要考虑使用其他JavaScript引擎,例如GraalVM中的JavaScript引擎。

    92710编辑于 2024-03-19
  • Java新纪元:一探JDK 15的全新特性

    Remove the Nashorn JavaScript Engine JEP 372标志着在JDK 15中正式移除Nashorn JavaScript引擎。 然而,随着时间的推移和技术的发展,Nashorn逐渐被认为是过时的,并且有更现代的替代品。这个决定对某些开发者来说可能有显著影响,尤其是那些依赖Nashorn执行JavaScript代码的人。 移除Nashorn的影响: 现有应用的兼容性: 使用Nashorn作为JavaScript引擎的应用程序将需要寻找替代方案。这可能需要重大的代码重写或架构更改。 开发者可能需要采取的行动: 评估影响: 如果你的应用程序使用了Nashorn,首先评估移除Nashorn对你的应用程序可能产生的影响。查看哪些部分使用了Nashorn,以及它们的重要性。 GraalVM是一个高性能的多语言运行环境,支持JavaScript,并提供了与Nashorn类似的功能。

    26900编辑于 2025-05-30
  • 来自专栏红蓝对抗

    AJ-REPORT全新鉴权及远程命令修复绕过分析

    ) invoke:494, ScriptFunction (jdk.nashorn.internal.runtime) apply:393, ScriptRuntime (jdk.nashorn.internal.runtime (jdk.nashorn.api.scripting) invokeFunction:190, NashornScriptEngine (jdk.nashorn.api.scripting) verification 经过一番检索发现此处针对nashorn的安全过滤是JEP202:https://openjdk.org/jeps/202。 提供一个 Java 类访问过滤接口 ,ClassFilter可以由使用 Nashorn 的 Java 应用程序实现。 Nashorn 将在从脚本访问任何 Java 类之前查询提供的接口实例ClassFilter,以确定是否允许访问。无security manager是否存在,都会发生这种情况。

    77010编辑于 2024-05-22
  • 来自专栏玄魂工作室

    Struts2 S2-052 RCE简单测试

    > <map> <entry> <jdk.nashorn.internal.objects.NativeString> <flags>0</flags> > <jdk.nashorn.internal.objects.NativeString reference=".. /jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString /entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString /entry/jdk.nashorn.internal.objects.NativeString"/> </entry> </map> 上面 的payload中,注意这一段: ?

    1.5K60发布于 2018-04-12
  • 来自专栏yaphetsfang

    编译和调试openjdk8

    main" java.lang.VerifyError Running nasgen Exception in thread "main" java.lang.VerifyError: class jdk.nashorn.internal.objects.ScriptFunctionImpl (Ljava/lang/Object;)V 解决方法,修改nashorn/make/BuildNashorn.gmk文件, $(CP) -R -p $(NASHORN_OUTPUTDIR)/nashorn_classes /* $(@D)/ $(FIXPATH) $(JAVA) \ - -cp "$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR )/nashorn_classes" \ + -Xbootclasspath/p:"$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR )/nashorn_classes" \ jdk.nashorn.internal.tools.nasgen.Main $(@D) jdk.nashorn.internal.objects $(@

    2.4K20发布于 2020-08-05
  • 空安全编程的典范:Java 8中的安全应用指南

    JavaScriptJava 8 引入了 Nashorn 作为新的 JavaScript 引擎,用于替代旧版的 Rhino 引擎,可以在 Java 应用程序中执行 JavaScript 代码。 Nashorn 通过优化和与 Java 的本地集成提供了更好的性能。 "print('Hello Nashorn!')") 函数式编程: Nashorn 支持 lambda 表达式和流式 API,使其更符合现代 JavaScript 标准。性能: 由于其现代化设计和优化技术,Nashorn 通常比 Rhino 更快。 $ jjs script.js与 Java 应用程序集成:可以将 Nashorn 集成到 Java 应用程序中,用于脚本支持、规则引擎和动态行为等多种用途。

    46110编辑于 2025-01-17
  • 来自专栏吴伟祥

    Java 8 新特性 转

    新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。 Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。 更多的新特性可以参阅官网:What's New in JDK 8 序号 特性 1 Lambda 表达式 2 方法引用 3 函数式接口 4 默认方法 5 Stream 6 Optional 类 7 Nashorn

    60650发布于 2018-09-13
  • 来自专栏用户9378866的专栏

    Spring Boot3.0升级,踩坑之旅,附解决方案(二)

    Jdk8中内置的JavaScript引擎 nashorn 被移除,导致验证码使用报错Cannot invoke "javax.script.ScriptEngine.eval(String)" because 查询相关资料Jdk8自带的JavaScript引擎 nashorn 再升级到Jdk9后就被移除了,从而导致报错解决办法:添加JavaScript引擎 nashorn依赖<dependency> < groupId>org.openjdk.nashorn</groupId> <artifactId>nashorn-core</artifactId> <version>15.4</version

    1.7K20编辑于 2022-12-26
  • 来自专栏码匠的流水账

    聊聊maxwell的Scripting

    ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("nashorn ScriptEngineManager manager = new ScriptEngineManager(); return manager.getEngineByName("nashorn 定义了processRowFunc、processHeartbeatFunc、processDDLFunc属性;其构造器接收filename参数,它创建ScriptEngineManager,然后获取名为nashorn 定义了processRowFunc、processHeartbeatFunc、processDDLFunc属性;其构造器接收filename参数,它创建ScriptEngineManager,然后获取名为nashorn

    66600发布于 2020-05-10
  • 来自专栏一个会写诗的程序员的博客

    CodeMirror 代码渲染神器的极简入门实例

    javax.script.ScriptEngineManager object NashornUtil { private val scriptEngineManager = ScriptEngineManager() private val nashorn = scriptEngineManager.getEngineByName("nashorn") fun evalJs(js: String): String { try { return nashorn.eval(js).toString() } catch (e: Exception) { e.printStackTrace () return "" } } } 使用的是 Java 8 中的nashorn 引擎(支持 ES5 的语法)。

    4.6K10发布于 2018-09-12
领券