问题标签 [groovyclassloader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - GroovyClassLoader parseClass 安全性
我正在构建一个 Grails 应用程序,它允许用户编写 Groovy 代码,然后在我的框架中执行。当然,这是一个巨大的安全威胁,因为用户可能会输入恶意代码。
Groovy 类正在使用GroovyClassLoader#parseClass(String)
.
我想严格限制用户编写的 Groovy 类可以访问的类和操作。似乎有两个通用选项,它们并不相互排斥:
1)使用和策略文件来限制允许SecurityManager
特定代码执行的操作,codeSource
2)扩展GroovyClassLoader
并实现包白名单或黑名单,以限制用户代码可以访问哪些类。
不受信任的代码不能以任何方式访问 GORM 或数据库,读取或写入本地磁盘,打开网络套接字,写入控制台等。
我已经实现了 SecurityManager 方法并且它部分工作,阻止了至少读取文件、打开套接字、退出 VM 等的能力。
然而,攻击者仍然可以通过 Groovy 写入控制台println(String)
(不是一个重要问题),更糟糕的是:她可以成功User.list()
获取所有用户及其哈希密码,以及数据库中的所有其他内容!我怎样才能防止这种情况?
我正在考虑扩展 GroovyClassLoader 以防止用户脚本加载,例如我的域类。这足够了吗?你会建议别的吗?我怎样才能确保我没有留下任何漏洞?
java - 在运行时创建的外部 groovy 类中注入 spring 服务
我有一个 Spring 驱动的应用程序并且想要集成 groovy。具体来说,我有一个带有一组抽象方法定义的抽象 java 类和一个使用自动装配的存储库。
这个类必须由几个最终的 groovy 外部类(每个客户端一个)来实现。
此时,我以这种方式在 java 中调用 Groovy 类:
问题是我需要在每个 Groovy 外部类中自动装配存储库变量,但目前为空。
当我在运行时创建它时,如何通知 Groovy 类以获取 inyected 存储库变量?
谢谢!
编辑
Y 已经使用 groovyObjectObject 的 setProperty 方法解决了这个问题:
java - Groovy 类加载机制
我真的是 groovy 脚本的新手,但是按照一些教程,我尝试parseClass()
使用GroovyClassLoader
. 我写了一些片段,对我来说效果很好。问题是我不清楚 groovy 引擎在我的视野之外做什么以及这些脚本是如何编译的?
是否创建了一个新类并将其加载到 jvm 中?还是我的应用程序使用了一些缓存的源?
这是我要解析的类:
我加载它build()
如下:
}
非常感谢任何澄清。
BR。
groovy - GroovyClassLoader 和导入
我在我的 Java 类中使用 GroovyClassLoader 来解析某个(理想情况下是复杂的)groovy 文件(将在下一步中执行):
调用 MyClass.java
知道:
- Groovy 文件需要存储在文件系统中,因为需要在不重新部署的情况下进行更改。
- 这个 groovy 文件需要几个导入:
GroovyFile.groovy 导入
当调用parseClass方法时,会引发此异常:
例外
在解析基类之前,我可以在不解析每个导入类的情况下获得我期望的行为吗?
谢谢!
groovy - 如何在类加载器中加载的类中转换对象
我是堆栈溢出的新手。我创建了一个 Groovy 类加载器对象,在其中加载了脚本所需的所有类。我的任务是序列化和反序列化由类加载器中加载的类之一创建的对象。问题是在反序列化时我无法将类中的对象转换为类加载器中加载的类。我不知道如何在类加载器中加载的类中转换对象。有人可以帮助我吗?这 ?????在下面的代码片段中是一个在类加载器中加载的类,但我应该如何实现这一点。
提前致谢!!!
java - 将 IntegerMetaClass 动态添加到 GroovyShell
我IntegerMetaClass
只想在给定的GroovyShell
上下文中使用自定义。
原因是不要用我潜在的“令人不安”来污染整个运行时IntegerMetaClass
。
当我将 IntegerMetaClass.java 实现放入魔术包时,它就像一个魅力groovy.runtime.metaclass.java.lang
。但是,当我尝试手动将其添加到中间 GroovyClassLoader 时,它停止工作。
GroovyClassLoader
除了“解析” MetaClass 之外,我是否还有其他事情要做?其他地方?
更新1:
如上所述,IntegerMetaClass.minutes
当我将它直接放在我的 java 源类路径中时,查找正在工作。
更新2:
一个可能但不令人满意的解决方案:
gcl.parseClass
在通话后添加以下内容
但是这个解决方案必须在 MetaClass 源和原始目标类之间保持一种“映射”,以支持超过Integer
......
groovy - 如何在动态加载的 groovy 文件中使用导入
我试图想出一种方法,让我的用户通过动态加载他们的源文件来向主 groovy 应用程序提供插件。但是他们的 groovy 文件包含导入语句,我不知道如何让它们工作,即使有一个明显很好的类路径。
主应用程序是一个 shell 脚本 bin/top.sh:
lib/Top.groovy 类:
用户类 UserPlugin.groovy:
还有 lib/Lib.groovy:
当我运行时bin/top.sh
,我得到:UserPlugin.groovy: 3: unable to resolve class Lib
当我lib
像这样添加到类加载器时loader.addClasspath('lib')
,这是相当灾难性的:
这如何在保持所有脚本编写而不是编译的情况下工作?这甚至可能吗?
groovy - Groovy 无法解析 CloudHub 中的类
当我在 CloudHub 中运行应用程序时,Mule 流中的以下脚本出现以下错误。当我在 Anypoint Studio 上运行它时,没有任何问题。
我检查了部署的应用程序存档文件,在 classes 文件夹中是已编译的 company.cloudtools.util.Utilities 类。我不确定为什么 CloudHub 服务器无法找到错误定义的类文件。
错误:
Mule流程中的脚本:
实用程序类:
groovy - 如何编译 Groovy 源代码而不是从文件系统编译
我使用 GroovyClassLoader.parseClass(src) “即时”编译单个 groovy 源模块,一切正常。
但问题是当这个源模块导入其他类时,这些还没有编译。当我开始编译一个源但需要其他源并在源路径上准备好时,传统编译也会被编译。
如何使用带有目标的 GroovyClassLoader 来编译所有其他必需的源而不是来自 FILESYSYSTEM。我的来源例如在数据库中,通过 URI 远程 http 等。
java - 在java项目中执行groovy脚本,为什么运算符“>”被转换为“>”?
这是我的常规脚本:
"SingleDiseaseAction"
这是我在类方法中执行脚本的java代码"testConfig()"
:
在上面的代码中,我的 groovy 脚本可以通过 code 获取"hsdqTargetConfig.getTarget_compute()"
。
该"initScript"
方法仅用于导入一些 util 类:
感谢您阅读本文。对不起,我的英语不好。
这是错误报告:
我的 groovy jar 是"groovy-all-2.1.6.jar"
.
我检查了 groovy 的语法。Groovy 应该支持">"
操作符。
但现在我不知道为什么它是错误的。
是因为转换操作 from ">"
to">"
吗?如果确定,我可以为这个问题做些什么?