Получение ClassNotFoundException для com.ibm.ws.security.jaspi.ProviderRegistry в приложении Spring Boot - PullRequest
0 голосов
/ 12 февраля 2019

Я использую приложение Spring Boot с 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$1.run(AuthConfigFactory.java:75) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at javax.security.auth.message.config.AuthConfigFactory$1.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

Класс com.ibm.ws.security.jaspi.ProviderRegistry внешний видкак класс WebSphere, и он не связан с моим приложением, так как я использую tomcat.

1 Ответ

0 голосов
/ 12 февраля 2019

Проблема в том, что java security пытается создать AuthConfigFactory в AuthConfigFactory::getFactory().Сначала он проверяет, существует ли свойство безопасности authconfigprovider.factory.

Если свойство authconfigprovider.factory не существует, он создаст в качестве экземпляра класса по умолчанию org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl, что он, вероятно, будет в порядке.

Проблема заключается в том, что вы пытаетесь запустить на компьютере, который определил это свойство безопасности authconfigprovider.factory как com.ibm.ws.security.jaspi.ProviderRegistry в файле java.security (возможно, этот компьютер используется для WebSphere).

Итакконечно, у вас нет класса 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.

...