У меня есть Spring Webapp, которое выдает некоторые запутанные ошибки при запуске, когда я развертываю его на своем производственном сервере (они не возникают, когда я запускаю его локально) - ошибки, похоже, ни на что не влияют, поэтому этот вопрос больше не подходит любопытство, чем настоящая потребность в помощи.
Вот трассировка стека:
20-Apr-2016 17:31:31.711 INFO [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.loadClass Security Violation, attempt to use Restricted Class: jdk.internal.dynalink.support.messages_en_US
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessClassInPackage.jdk.internal.dynalink.support")
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.SecurityManager.checkPackageAccess(SecurityManager.java:1564)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1268)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
at java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:2640)
at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1501)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1465)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1361)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:1082)
at java.util.logging.Logger.findResourceBundle(Logger.java:1879)
at java.util.logging.Logger.setupResourceInfo(Logger.java:1940)
at java.util.logging.Logger.<init>(Logger.java:380)
at java.util.logging.LogManager.demandLogger(LogManager.java:554)
at java.util.logging.Logger.demandLogger(Logger.java:455)
at java.util.logging.Logger.getLogger(Logger.java:553)
at jdk.internal.dynalink.support.Guards.<clinit>(Guards.java:101)
at jdk.nashorn.internal.runtime.Undefined.<clinit>(Undefined.java:51)
at jdk.nashorn.internal.runtime.JSType.<clinit>(JSType.java:263)
at jdk.nashorn.internal.runtime.AccessorProperty.<clinit>(AccessorProperty.java:60)
at jdk.nashorn.internal.objects.Global.$clinit$(Global.java)
at jdk.nashorn.internal.objects.Global.<clinit>(Global.java:919)
at jdk.nashorn.internal.runtime.Context.newGlobal(Context.java:1102)
at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:347)
at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:343)
at java.security.AccessController.doPrivileged(Native Method)
at jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:343)
at jdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:143)
at jdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:148)
at javax.script.ScriptEngineManager.getEngineByName(ScriptEngineManager.java:238)
at com.my.applicationlib.security.ScriptSandbox.<init>(ScriptSandbox.java:60)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$4.run(AbstractAutowireCapableBeanFactory.java:1089)
at java.security.AccessController.doPrivileged(Native Method)
...
И соответствующий код выглядит следующим образом:
@Service
public class ScriptSandbox {
ScriptEngine _scriptEngine;
AccessControlContext _accessControlContext;
public ScriptSandbox() throws InstantiationException{
ScriptEngineManager sem = new ScriptEngineManager();
_scriptEngine = sem.getEngineByName("nashorn");//This error happens on this line.
if (_scriptEngine==null){
throw new InstantiationException("Could not load script engine: "+
"nashorn");
}
setPermissions(null);
}
}
Мне не удалось найти много актуальной информации в Google, больше всего я видел, что она мне нужна в моей конфигурации безопасности Java. Мой выглядит так, поэтому я думаю, что у меня есть то, что мне нужно:
grant {permission java.security.AllPermission; permission java.lang.RuntimePermission;};
Есть предположения?
Изменить: этот вопрос был отмечен как дубликат этого вопроса. Я не думаю, что это по следующим причинам:
он работает нормально, когда я инициализирую nashorn позже в приложении, кажется, что он работает. Я получаю эту ошибку при определении bean только из того, что могу сказать. Не думайте, что это проблема с подписью, поскольку она возникает только при определении bean-компонента.
Кроме того, на этот вопрос нет принятых ответов и мало голосов. Есть ли какое-либо из этих решений для этой проблемы?