从AWS SDK版本 1.11.700 切换到 1.11.908我们的库之一现在无法在受保护的环境中工作。更具体地说,新的 SDK 版本已更改ClientConfiguration,因此它现在通过检查环境变量来实例化 RetryPolicy。
不幸的是,我们将把这个库部署到一个禁止(SecurityManager in place)访问环境变量的环境中。这意味着我们所有依赖于AmazonHttpClient的代码不再可用,因为:
- 为了实例化
AmazonHttpClient
你必须传入一个有效的ClientConfiguration
(不接受空值) - 为了创建一个有效的
ClientConfiguration
,你需要能够读取 env vars
这是堆栈跟踪:
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getenv.AWS_RETRY_MODE")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:886)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at com.boomi.security.ExtendedSecurityManager.checkPermissionImpl(ExtendedSecurityManager.java:207)
at com.boomi.security.ExtendedSecurityManager.checkPermission(ExtendedSecurityManager.java:114)
at java.lang.System.getenv(System.java:894)
at com.amazonaws.retry.internal.RetryModeResolver.envVar(RetryModeResolver.java:67)
at com.amazonaws.retry.internal.RetryModeResolver.resolveRetryMode(RetryModeResolver.java:72)
at com.amazonaws.retry.internal.RetryModeResolver.<init>(RetryModeResolver.java:46)
at com.amazonaws.retry.RetryPolicy.<clinit>(RetryPolicy.java:35)
at com.amazonaws.retry.PredefinedRetryPolicies.<clinit>(PredefinedRetryPolicies.java:30)
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:89)
我们提出的所有选项都不适用于这种情况:
- 子类
ClientConfiguration
化以抑制异常:无法尝试捕获对 super() 构造函数的调用 ClientConfiguration
是一个类,因此我们没有要实现的接口java.policy
无法修改以允许访问该属性:环境不在我们的控制范围内- 异常是从而不是从引发的,因此它甚至与单个对象无关......