Spring 引导应用程序 com.ibm.ws.security.jaspi.ProviderRegistry 上获取 ClassNotFoundException
Getting ClassNotFoundException on com.ibm.ws.security.jaspi.ProviderRegistry on Spring Boot application
我正在使用 Spring 引导应用程序 tomcat 作为容器。
在某些机器上它正在工作,而在其他机器上我得到:
java.lang.SecurityException: AuthConfigFactory error: java.lang.ClassNotFoundException: com.ibm.ws.security.jaspi.ProviderRegistry
at javax.security.auth.message.config.AuthConfigFactory.getFactory(AuthConfigFactory.java:85) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.authenticator.AuthenticatorBase.findJaspicProvider(AuthenticatorBase.java:1205) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.authenticator.AuthenticatorBase.getJaspicProvider(AuthenticatorBase.java:1195) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:469) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176) [na:1.7.0]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) [na:1.7.0]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at java.lang.Thread.run(Thread.java:795) [na:1.7.0]
Caused by: java.lang.ClassNotFoundException: com.ibm.ws.security.jaspi.ProviderRegistry
at java.lang.Class.forNameImpl(Native Method) ~[na:1.7.0]
at java.lang.Class.forName(Class.java:186) ~[na:1.7.0]
at javax.security.auth.message.config.AuthConfigFactory.run(AuthConfigFactory.java:75) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at javax.security.auth.message.config.AuthConfigFactory.run(AuthConfigFactory.java:66) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at java.security.AccessController.doPrivileged(AccessController.java:330) ~[na:1.7.0]
at javax.security.auth.message.config.AuthConfigFactory.getFactory(AuthConfigFactory.java:65) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
... 16 common frames omitted
class com.ibm.ws.security.jaspi.ProviderRegistry
看起来像 WebSphere class,它与我的应用程序无关,因为我正在使用 tomcat。
问题是 java 安全尝试在 AuthConfigFactory::getFactory()
中创建 AuthConfigFactory。
它首先检查安全 属性 authconfigprovider.factory
是否存在。
如果 属性 authconfigprovider.factory
不存在,它将创建 class org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl
的默认实例,这可能没问题。
问题是当您尝试 运行 在已将安全 属性 authconfigprovider.factory
定义为 java.security 文件中的 com.ibm.ws.security.jaspi.ProviderRegistry
的机器上(可能是那台机器用于 WebSphere)。
所以你当然没有 class com.ibm.ws.security.jaspi.ProviderRegistry
你会得到 ClassNotFoundException
.
要解决它,请尝试创建您自己的 java.security 文件并将其定位在您的应用程序下,在该文件内 - 覆盖 属性,例如 authconfigprovider.factory=org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl
。
要激活新的 java.security 文件,请添加 jvm 参数 -Djava.security.properties=java.security
.
我正在使用 Spring 引导应用程序 tomcat 作为容器。
在某些机器上它正在工作,而在其他机器上我得到:
java.lang.SecurityException: AuthConfigFactory error: java.lang.ClassNotFoundException: com.ibm.ws.security.jaspi.ProviderRegistry
at javax.security.auth.message.config.AuthConfigFactory.getFactory(AuthConfigFactory.java:85) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.authenticator.AuthenticatorBase.findJaspicProvider(AuthenticatorBase.java:1205) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.authenticator.AuthenticatorBase.getJaspicProvider(AuthenticatorBase.java:1195) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:469) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176) [na:1.7.0]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) [na:1.7.0]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
at java.lang.Thread.run(Thread.java:795) [na:1.7.0]
Caused by: java.lang.ClassNotFoundException: com.ibm.ws.security.jaspi.ProviderRegistry
at java.lang.Class.forNameImpl(Native Method) ~[na:1.7.0]
at java.lang.Class.forName(Class.java:186) ~[na:1.7.0]
at javax.security.auth.message.config.AuthConfigFactory.run(AuthConfigFactory.java:75) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at javax.security.auth.message.config.AuthConfigFactory.run(AuthConfigFactory.java:66) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
at java.security.AccessController.doPrivileged(AccessController.java:330) ~[na:1.7.0]
at javax.security.auth.message.config.AuthConfigFactory.getFactory(AuthConfigFactory.java:65) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
... 16 common frames omitted
class com.ibm.ws.security.jaspi.ProviderRegistry
看起来像 WebSphere class,它与我的应用程序无关,因为我正在使用 tomcat。
问题是 java 安全尝试在 AuthConfigFactory::getFactory()
中创建 AuthConfigFactory。
它首先检查安全 属性 authconfigprovider.factory
是否存在。
如果 属性 authconfigprovider.factory
不存在,它将创建 class org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl
的默认实例,这可能没问题。
问题是当您尝试 运行 在已将安全 属性 authconfigprovider.factory
定义为 java.security 文件中的 com.ibm.ws.security.jaspi.ProviderRegistry
的机器上(可能是那台机器用于 WebSphere)。
所以你当然没有 class com.ibm.ws.security.jaspi.ProviderRegistry
你会得到 ClassNotFoundException
.
要解决它,请尝试创建您自己的 java.security 文件并将其定位在您的应用程序下,在该文件内 - 覆盖 属性,例如 authconfigprovider.factory=org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl
。
要激活新的 java.security 文件,请添加 jvm 参数 -Djava.security.properties=java.security
.