如何解决没有与脚本语言 JavaScript 相关联的脚本引擎
我正在 CentOS 7 服务器上安装 Shibboleth IDP。我安装了 JDK 15.0.2 和 Tomcat 9.0.44
Java 版本是:
java version "15.0.2" 2021-01-19
Java(TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.2+7-27,mixed mode,sharing)
我编译了 Shibboleth war 并将其部署到 Tomcat。但是,在尝试启动应用程序时,我在 Tomcat 日志中收到此错误:
2021-03-16 13:02:41.218 [ WARN] : net.shibboleth.ext.spring.context.DelimiterAwareApplicationContext: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shibboleth.ProtocolLookupFunction' defined in file [/opt/shibboleth-idp/system/conf/audit-system.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.shibboleth.idp.profile.context.navigate.ScriptedContextLookupFunction]: Factory method 'inlineScript' threw exception; nested exception is net.shibboleth.utilities.java.support.logic.ConstraintViolationException: No scripting engine associated with scripting language JavaScript
2021-03-16 13:02:41.240 [ERROR] : org.springframework.web.context.ContextLoader: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shibboleth.ProtocolLookupFunction' defined in file [/opt/shibboleth-idp/system/conf/audit-system.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [net.shibboleth.idp.profile.context.navigate.ScriptedContextLookupFunction]: Factory method 'inlineScript' threw exception; nested exception is net.shibboleth.utilities.java.support.logic.ConstraintViolationException: No scripting engine associated with scripting language JavaScript
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
如果我理解正确的话,JRE 中应该有一个脚本引擎来执行 JavaScript。是否需要启用?怎么样?
解决方法
Java 15 及更高版本不再包含捆绑的 JavaScript 引擎。
解决这个问题最简单的方法是使用早期版本的 Java。请注意,Shibboleth 项目仅正式支持 Java 的长期支持版本,对于 IdP V4.0.1 意味着 Java 11。
另一位评论者指出,如果您确实需要使用最新的 Java 和当前的 IdP 版本,您可以将单独的 JavaScript 引擎添加到您的类路径中,但这不是受支持的配置。
展望未来,Shibbleth IdP 4.1 版本(即将推出)有一个插件机制来帮助支持这个用例,但使用 Java 11 仍然是最简单的方法。
当前版本的 Shibboleth IdP 的完整系统要求文档在此处:https://wiki.shibboleth.net/confluence/display/IDP4/SystemRequirements
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。