没有与脚本语言关联的脚本引擎 JavaScript

No scripting engine associated with scripting language 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中应该有一个脚本引擎来执行Java脚本。是否需要启用?怎么样?

Java 15 及更高版本不再包含捆绑的 Java脚本引擎。

处理此问题的最简单方法是使用 Java 的早期版本。请注意,Shibboleth 项目仅正式支持 Java 的长期支持版本,对于 IdP V4.0.1 意味着 Java 11.

另一位评论者指出,如果您确实需要使用最新的 Java 和当前的 IdP 版本,您可以将单独的 Java 脚本引擎添加到您的类路径,但它不是受支持的配置。

展望未来,Shibbleth IdP 4.1 版本(现在很快就会发布)有一个插件机制来帮助支持这个用例,但使用 Java 11 仍然是最简单的方法。

当前版本的 Shibboleth IdP 的完整系统要求文档位于:https://wiki.shibboleth.net/confluence/display/IDP4/SystemRequirements