我有一个 Elasticsearch开源插件,需要反射来检查 HTTP 请求的原始地址。
在 ES 2.2 中,他们为插件引入了安全权限,按照说明,我在 plugin-security.policy 文件中添加了一个授权,内容如下:
grant {
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
现在安装插件后,我可以看到这一点(如文档中所预期的那样)。因此,我假设许可请求已成功启动。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.reflect.ReflectPermission suppressAccessChecks
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Installed readonlyrest into /elasticsearch/plugins/readonlyrest
但是,从我实际使用反射的函数中,仍然看到这个错误......
java.security.AccessControlException: access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:884)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:128)
at org.elasticsearch.plugin.readonlyrest.acl.blocks.rules.impl.HostsRule.getAddress(HostsRule.java:76)
at org.elasticsearch.plugin.readonlyrest.acl.blocks.rules.impl.HostsRule.match(HostsRule.java:130)
at org.elasticsearch.plugin.readonlyrest.acl.blocks.Block.check(Block.java:104)
at org.elasticsearch.plugin.readonlyrest.acl.ACL.check(ACL.java:48)
at org.elasticsearch.plugin.readonlyrest.ReadonlyRestAction$1.process(ReadonlyRestAction.java:60)
at org.elasticsearch.rest.RestController$ControllerFilterChain.continueProcessing(RestController.java:265)
有什么遗漏吗?我没有任何线索。