将Spring引导从1.3.7升级到1.4.0导致AuthenticatorBase.getJaspicProvider中出现NullPointerException

将Spring引导从1.3.7升级到1.4.0导致AuthenticatorBase.getJaspicProvider中出现NullPointerException,spring,spring-boot,tomcat8,Spring,Spring Boot,Tomcat8,这在某种程度上是由spring boot starter球衣附带的tomcat嵌入式核心版本8.5.4造成的。它会在所有集成测试中生成如下所示的错误。只有重写pom以使用tomcat embed core版本8.0.36,它才会起作用。奇怪的是,这是我收到的唯一错误信息 java.lang.NullPointerException: null at org.apache.catalina.authenticator.AuthenticatorBase.getJaspicProvider(

这在某种程度上是由spring boot starter球衣附带的tomcat嵌入式核心版本8.5.4造成的。它会在所有集成测试中生成如下所示的错误。只有重写pom以使用tomcat embed core版本8.0.36,它才会起作用。奇怪的是,这是我收到的唯一错误信息

java.lang.NullPointerException: null
    at org.apache.catalina.authenticator.AuthenticatorBase.getJaspicProvider(AuthenticatorBase.java:1140)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:431)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
这是我的依赖树:

[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ sample-services ---
[INFO] com.sample:sample-services:jar:1.0.0-SNAPSHOT
[INFO] +- com.sample:sample-customer:jar:1.0.0-SNAPSHOT:compile
[INFO] |  +- com.sample:sample-core:jar:1.0.0-SNAPSHOT:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.4.0.RELEASE:compile
[INFO] |  |  |  +- org.springframework.boot:spring-boot-starter-aop:jar:1.4.0.RELEASE:compile
[INFO] |  |  |  |  \- org.aspectj:aspectjweaver:jar:1.8.9:compile
[INFO] |  |  |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.4.0.RELEASE:compile
[INFO] |  |  |  |  +- org.apache.tomcat:tomcat-jdbc:jar:8.5.4:compile
[INFO] |  |  |  |  |  \- org.apache.tomcat:tomcat-juli:jar:8.5.4:compile
[INFO] |  |  |  |  \- org.springframework:spring-jdbc:jar:4.3.2.RELEASE:compile
[INFO] |  |  |  +- org.hibernate:hibernate-core:jar:5.0.9.Final:compile
[INFO] |  |  |  |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] |  |  |  |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  |  |  |  +- org.jboss:jandex:jar:2.0.0.Final:compile
[INFO] |  |  |  |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  |  |  |  \- xml-apis:xml-apis:jar:1.4.01:compile
[INFO] |  |  |  |  \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile
[INFO] |  |  |  +- org.hibernate:hibernate-entitymanager:jar:5.0.9.Final:compile
[INFO] |  |  |  +- javax.transaction:javax.transaction-api:jar:1.2:compile
[INFO] |  |  |  +- org.springframework.data:spring-data-jpa:jar:1.10.2.RELEASE:compile
[INFO] |  |  |  |  \- org.springframework:spring-orm:jar:4.3.2.RELEASE:compile
[INFO] |  |  |  \- org.springframework:spring-aspects:jar:4.3.2.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.0.RELEASE:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.1.7:compile
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.1.7:compile
[INFO] |  |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile
[INFO] |  |  |  +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile
[INFO] |  |  |  \- org.slf4j:log4j-over-slf4j:jar:1.7.21:compile
[INFO] |  |  +- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] |  |  +- com.h2database:h2:jar:1.4.192:compile
[INFO] |  |  +- org.postgresql:postgresql:jar:9.4.1209.jre7:compile
[INFO] |  |  +- javax:javaee-api:jar:7.0:compile
[INFO] |  |  |  \- com.sun.mail:javax.mail:jar:1.5.5:compile
[INFO] |  |  |     \- javax.activation:activation:jar:1.1:compile
[INFO] |  |  +- org.apache.commons:commons-lang3:jar:3.4:compile
[INFO] |  |  +- commons-codec:commons-codec:jar:1.10:compile
[INFO] |  |  +- org.apache.httpcomponents:httpcore:jar:4.4.5:compile
[INFO] |  |  +- org.joda:joda-money:jar:0.10.0:compile
[INFO] |  |  \- com.sun.jna:jna:jar:3.0.9:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-data-elasticsearch:jar:1.4.0.RELEASE:compile
[INFO] |  |  \- org.springframework.data:spring-data-elasticsearch:jar:2.0.2.RELEASE:compile
[INFO] |  |     +- org.springframework:spring-tx:jar:4.3.2.RELEASE:compile
[INFO] |  |     +- org.springframework.data:spring-data-commons:jar:1.12.2.RELEASE:compile
[INFO] |  |     +- commons-lang:commons-lang:jar:2.6:compile
[INFO] |  |     \- org.elasticsearch:elasticsearch:jar:2.3.4:compile
[INFO] |  |        +- org.apache.lucene:lucene-core:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-backward-codecs:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-analyzers-common:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-queries:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-memory:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-highlighter:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-queryparser:jar:5.5.0:compile
[INFO] |  |        |  \- org.apache.lucene:lucene-sandbox:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-suggest:jar:5.5.0:compile
[INFO] |  |        |  \- org.apache.lucene:lucene-misc:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-join:jar:5.5.0:compile
[INFO] |  |        |  \- org.apache.lucene:lucene-grouping:jar:5.5.0:compile
[INFO] |  |        +- org.apache.lucene:lucene-spatial:jar:5.5.0:compile
[INFO] |  |        |  +- org.apache.lucene:lucene-spatial3d:jar:5.5.0:compile
[INFO] |  |        |  \- com.spatial4j:spatial4j:jar:0.5:compile
[INFO] |  |        +- org.elasticsearch:securesm:jar:1.0:compile
[INFO] |  |        +- com.carrotsearch:hppc:jar:0.7.1:compile
[INFO] |  |        +- org.joda:joda-convert:jar:1.2:compile
[INFO] |  |        +- com.fasterxml.jackson.dataformat:jackson-dataformat-smile:jar:2.8.1:compile
[INFO] |  |        +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.8.1:compile
[INFO] |  |        +- io.netty:netty:jar:3.10.5.Final:compile
[INFO] |  |        +- com.ning:compress-lzf:jar:1.0.2:compile
[INFO] |  |        +- com.tdunning:t-digest:jar:3.0:compile
[INFO] |  |        +- org.hdrhistogram:HdrHistogram:jar:2.1.6:compile
[INFO] |  |        +- commons-cli:commons-cli:jar:1.3.1:compile
[INFO] |  |        \- com.twitter:jsr166e:jar:1.1.0:compile
[INFO] |  +- com.google.guava:guava:jar:19.0:compile
[INFO] |  +- org.apache.httpcomponents:httpclient:jar:4.5.2:compile
[INFO] |  +- commons-httpclient:commons-httpclient:jar:3.1:compile
[INFO] |  +- commons-io:commons-io:jar:2.5:compile
[INFO] |  +- net.sf.uadetector:uadetector-core:jar:0.9.22:compile
[INFO] |  |  +- net.sf.qualitycheck:quality-check:jar:1.3:compile
[INFO] |  |  +- com.google.code.findbugs:jsr305:jar:2.0.3:compile
[INFO] |  |  \- javax.annotation:jsr250-api:jar:1.0:compile
[INFO] |  +- net.sf.uadetector:uadetector-resources:jar:2014.10:compile
[INFO] |  \- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.8.1:compile
[INFO] +- com.sample:sample-messaging:jar:1.0.0-SNAPSHOT:compile
[INFO] |  +- com.amazonaws:aws-java-sdk-sns:jar:1.11.24:compile
[INFO] |  \- com.amazonaws:aws-java-sdk-sqs:jar:1.11.24:compile
[INFO] +- org.springframework.boot:spring-boot-starter-jersey:jar:1.4.0.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:1.4.0.RELEASE:compile
[INFO] |  |  \- org.yaml:snakeyaml:jar:1.17:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.0.RELEASE:compile
[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.4:compile
[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.4:compile
[INFO] |  |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.4:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-validation:jar:1.4.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-web:jar:4.3.2.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-aop:jar:4.3.2.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-beans:jar:4.3.2.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-context:jar:4.3.2.RELEASE:compile
[INFO] |  +- org.glassfish.jersey.core:jersey-server:jar:2.23.1:compile
[INFO] |  |  +- org.glassfish.jersey.core:jersey-client:jar:2.23.1:compile
[INFO] |  |  +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.23.1:compile
[INFO] |  |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] |  |  +- org.glassfish.hk2:hk2-api:jar:2.4.0-b34:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b34:compile
[INFO] |  |  |  \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b34:compile
[INFO] |  |  \- org.glassfish.hk2:hk2-locator:jar:2.4.0-b34:compile
[INFO] |  |     \- org.javassist:javassist:jar:3.20.0-GA:compile
[INFO] |  +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.23.1:compile
[INFO] |  +- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.23.1:compile
[INFO] |  +- org.glassfish.jersey.ext:jersey-spring3:jar:2.23.1:compile
[INFO] |  |  +- org.glassfish.hk2:hk2:jar:2.4.0-b34:compile
[INFO] |  |  |  +- org.glassfish.hk2:config-types:jar:2.4.0-b34:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-core:jar:2.4.0-b34:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-config:jar:2.4.0-b34:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-runlevel:jar:2.4.0-b34:compile
[INFO] |  |  |  \- org.glassfish.hk2:class-model:jar:2.4.0-b34:compile
[INFO] |  |  |     \- org.glassfish.hk2.external:asm-all-repackaged:jar:2.4.0-b34:compile
[INFO] |  |  \- org.glassfish.hk2:spring-bridge:jar:2.4.0-b34:compile
[INFO] |  \- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.23.1:compile
[INFO] |     +- org.glassfish.jersey.ext:jersey-entity-filtering:jar:2.23.1:compile
[INFO] |     +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.8.1:compile
[INFO] |     \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.8.1:compile
[INFO] |        \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.8.1:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.1:compile
[INFO] |  \- com.fasterxml.jackson.core:jackson-core:jar:2.8.1:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.1:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.4.0.RELEASE:compile
[INFO] |  +- org.hibernate:hibernate-validator:jar:5.2.4.Final:compile
[INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
[INFO] |  |  \- com.fasterxml:classmate:jar:1.3.1:compile
[INFO] |  \- org.springframework:spring-webmvc:jar:4.3.2.RELEASE:compile
[INFO] |     \- org.springframework:spring-expression:jar:4.3.2.RELEASE:compile
[INFO] +- com.amazonaws:aws-java-sdk-s3:jar:1.11.24:compile
[INFO] |  +- com.amazonaws:aws-java-sdk-kms:jar:1.11.24:compile
[INFO] |  \- com.amazonaws:aws-java-sdk-core:jar:1.11.24:compile
[INFO] |     +- commons-logging:commons-logging:jar:1.1.3:compile
[INFO] |     +- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.8.1:compile
[INFO] |     \- joda-time:joda-time:jar:2.9.4:compile
[INFO] +- com.wordnik:swagger-jersey2-jaxrs_2.10:jar:1.3.13:compile
[INFO] |  +- com.wordnik:swagger-jaxrs_2.10:jar:1.3.13:compile
[INFO] |  |  +- com.wordnik:swagger-core_2.10:jar:1.3.13:compile
[INFO] |  |  |  +- com.fasterxml.jackson.module:jackson-module-scala_2.10:jar:2.4.1:compile
[INFO] |  |  |  |  \- com.thoughtworks.paranamer:paranamer:jar:2.6:compile
[INFO] |  |  |  +- com.fasterxml.jackson.module:jackson-module-jsonSchema:jar:2.4.1:compile
[INFO] |  |  |  +- com.wordnik:swagger-annotations:jar:1.3.13:compile
[INFO] |  |  |  +- org.json4s:json4s-ext_2.10:jar:3.2.11:compile
[INFO] |  |  |  +- org.json4s:json4s-native_2.10:jar:3.2.11:compile
[INFO] |  |  |  |  \- org.json4s:json4s-core_2.10:jar:3.2.11:compile
[INFO] |  |  |  |     +- org.json4s:json4s-ast_2.10:jar:3.2.11:compile
[INFO] |  |  |  |     \- org.scala-lang:scalap:jar:2.10.0:compile
[INFO] |  |  |  |        \- org.scala-lang:scala-compiler:jar:2.10.0:compile
[INFO] |  |  |  \- org.json4s:json4s-jackson_2.10:jar:3.2.11:compile
[INFO] |  |  \- org.reflections:reflections:jar:0.9.9:compile
[INFO] |  |     \- com.google.code.findbugs:annotations:jar:2.0.1:compile
[INFO] |  \- org.glassfish.jersey.media:jersey-media-multipart:jar:2.1:compile
[INFO] |     \- org.jvnet.mimepull:mimepull:jar:1.8:compile
[INFO] +- org.glassfish.jersey.ext:jersey-bean-validation:jar:2.23.1:compile
[INFO] |  +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b34:compile
[INFO] |  +- org.glassfish.jersey.core:jersey-common:jar:2.23.1:compile
[INFO] |  |  +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.23.1:compile
[INFO] |  |  \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO] |  +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] |  +- javax.el:javax.el-api:jar:2.2.4:compile
[INFO] |  +- org.glassfish.web:javax.el:jar:2.2.4:compile
[INFO] |  \- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] +- com.jayway.restassured:rest-assured:jar:2.9.0:test
[INFO] |  +- org.codehaus.groovy:groovy:jar:2.4.7:test
[INFO] |  +- org.codehaus.groovy:groovy-xml:jar:2.4.7:test
[INFO] |  +- org.apache.httpcomponents:httpmime:jar:4.5.2:test
[INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] |  +- org.hamcrest:hamcrest-library:jar:1.3:test
[INFO] |  +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:test
[INFO] |  +- com.jayway.restassured:json-path:jar:2.9.0:test
[INFO] |  |  +- org.codehaus.groovy:groovy-json:jar:2.4.7:test
[INFO] |  |  \- com.jayway.restassured:rest-assured-common:jar:2.9.0:test
[INFO] |  \- com.jayway.restassured:xml-path:jar:2.9.0:test
[INFO] +- com.jayway.jsonpath:json-path:jar:2.2.0:compile
[INFO] |  +- net.minidev:json-smart:jar:2.2.1:compile
[INFO] |  |  \- net.minidev:accessors-smart:jar:1.1:compile
[INFO] |  |     \- org.ow2.asm:asm:jar:5.0.3:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.4.0.RELEASE:test
[INFO] |  +- org.springframework.boot:spring-boot-test:jar:1.4.0.RELEASE:test
[INFO] |  +- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.4.0.RELEASE:test
[INFO] |  +- junit:junit:jar:4.12:test
[INFO] |  +- org.mockito:mockito-core:jar:1.10.19:test
[INFO] |  |  \- org.objenesis:objenesis:jar:2.1:test
[INFO] |  +- org.skyscreamer:jsonassert:jar:1.3.0:test
[INFO] |  +- org.springframework:spring-core:jar:4.3.2.RELEASE:compile
[INFO] |  \- org.springframework:spring-test:jar:4.3.2.RELEASE:test
[INFO] +- org.assertj:assertj-core:jar:3.2.0:compile
[INFO] +- org.springframework.boot:spring-boot-configuration-processor:jar:1.4.0.RELEASE:compile
[INFO] |  \- org.json:json:jar:20140107:compile
[INFO] +- org.neo4j:neo4j-cypher-compiler-2.2:jar:2.2.5:compile
[INFO] |  +- org.scala-lang:scala-library:jar:2.10.5:compile
[INFO] |  +- org.scala-lang:scala-reflect:jar:2.10.5:compile
[INFO] |  +- org.parboiled:parboiled-scala_2.10:jar:1.1.7:compile
[INFO] |  |  \- org.parboiled:parboiled-core:jar:1.1.7:compile
[INFO] |  \- com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.4:compile
[INFO] \- org.springframework.boot:spring-boot-devtools:jar:1.4.0.RELEASE:compile
[INFO]    +- org.springframework.boot:spring-boot:jar:1.4.0.RELEASE:compile
[INFO]    \- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.0.RELEASE:compile
这是我的应用课程:

@EntityScan(basePackageClasses = { Application.class, Jsr310JpaConverters.class })
@EnableScheduling
@EnableAsync
@SpringBootApplication(scanBasePackages = "com.sample")
public class Application extends Loggable implements AsyncConfigurer {

    /**
     * This forces the SNS topics to be created and/or linked.
     */
    @Autowired
    @SuppressWarnings("all")
    private TopicFactory topicFactory;

    /**
     * It all begins here.
     */
    public static void main(String[] args) throws Exception {
        SpringApplication application = new SpringApplication(Application.class);
        application.setBanner(new SampleBanner());
        application.run(args);
    }

    /**
     * Returns the @Async executor.
     */
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(4);
        executor.setMaxPoolSize(4);
        executor.setQueueCapacity(0);
        executor.setThreadNamePrefix("Async-");
        executor.initialize();
        return executor;
    }

    /**
     * Returns the uncaught exception handler for @Async operations.
     */
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return (e, method, params) -> log.error("Uncaught async error", e);
    }
}

如果有人能告诉我从哪里开始,或者是什么原因导致它失败,那将是非常有帮助的。

可能的修复方法

1) 将authConfigFactory设置为Tomcat 8.5使用的默认authConfigFactory实现(示例基本实现):

2) 从类路径中删除重复的
AuthConfigFactory
类。在我的例子中,同一类有两种不同的实现:

org.apache.tomcat.embed/tomcat-embed-core/8.5.4/tomcat-embed-core-8.5.4.jar!/javax/security/auth/message/config/AuthConfigFactory.class
javax/javaee-api/7.0/javaee-api-7.0.jar!/javax/security/auth/message/config/AuthConfigFactory.class
javaee-api-7.0.jar
有自己的
AuthConfigFactory
实现,它与Tomcat 8.5不完全兼容,并导致
NullPointerException
(在Tomcat的版本中,有一个常量定义默认的jaspic实现类) 从gradle/mvn项目中删除
javaee api
依赖项(或包含不同AuthConfigFactory实现的任何其他依赖项)(如果可以的话)

3) 将Tomcat降级到8.0或7.0:

说明

这个问题与Tomcat升级(从8.0.x升级到8.5.x)有关,它是在Spring Boot从1.3.x升级到1.4的过程中进行的。 问题在于Tomcat8.5引入了jaspic支持()并提供了自己的AuthConfigFactory实现。此实现定义默认jaspic auth工厂实现:

package com.example;

import org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.security.auth.message.config.AuthConfigFactory;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        if (AuthConfigFactory.getFactory() == null) {
            AuthConfigFactory.setFactory(new AuthConfigFactoryImpl());
        }
        SpringApplication.run(DemoApplication.class, args);
    }
}
private static final String DEFAULT_JASPI_AUTHCONFIGFACTORYIMPL =
            "org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl";

未在其他实现(例如,javaee-api-7.0中的实现)中定义,并导致
NullPointerException
,因为未实例化AuthConfigFactory。

可能的修复

1) 将authConfigFactory设置为Tomcat 8.5使用的默认authConfigFactory实现(示例基本实现):

2) 从类路径中删除重复的
AuthConfigFactory
类。在我的例子中,同一类有两种不同的实现:

org.apache.tomcat.embed/tomcat-embed-core/8.5.4/tomcat-embed-core-8.5.4.jar!/javax/security/auth/message/config/AuthConfigFactory.class
javax/javaee-api/7.0/javaee-api-7.0.jar!/javax/security/auth/message/config/AuthConfigFactory.class
javaee-api-7.0.jar
有自己的
AuthConfigFactory
实现,它与Tomcat 8.5不完全兼容,并导致
NullPointerException
(在Tomcat的版本中,有一个常量定义默认的jaspic实现类) 从gradle/mvn项目中删除
javaee api
依赖项(或包含不同AuthConfigFactory实现的任何其他依赖项)(如果可以的话)

3) 将Tomcat降级到8.0或7.0:

说明

这个问题与Tomcat升级(从8.0.x升级到8.5.x)有关,它是在Spring Boot从1.3.x升级到1.4的过程中进行的。 问题在于Tomcat8.5引入了jaspic支持()并提供了自己的AuthConfigFactory实现。此实现定义默认jaspic auth工厂实现:

package com.example;

import org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.security.auth.message.config.AuthConfigFactory;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        if (AuthConfigFactory.getFactory() == null) {
            AuthConfigFactory.setFactory(new AuthConfigFactoryImpl());
        }
        SpringApplication.run(DemoApplication.class, args);
    }
}
private static final String DEFAULT_JASPI_AUTHCONFIGFACTORYIMPL =
            "org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl";

这在其他实现中没有定义(例如,javaee-api-7.0中的实现),并导致
NullPointerException
,因为没有实例化AuthConfigFactory。

感谢您的回复,我最终将javaee-api-7.0从我的库中排除。选项#1对我来说非常有效!感谢@MaciejMarczuk的选择和完整的解释。以下是1.4#2的发行说明对我们有用。将一个遗留应用程序移动到SpringBoot,并注意到类路径上有多个JavaEE版本。所有这些都被删除后,一切正常。我想补充一点,如果出于某些原因需要javaee api(例如持久性注释),您可以使用javaee web api来避免这个问题。感谢您的回复,我最终将javaee-api-7.0从我的库中排除。选项#1对我来说非常有效!感谢@MaciejMarczuk的选择和完整的解释。以下是1.4#2的发行说明对我们有用。将一个遗留应用程序移动到SpringBoot,并注意到类路径上有多个JavaEE版本。我想补充一点,如果出于某些原因需要JavaEEAPI(例如PersistenceAnnotations),您可以使用JavaEEWebAPI来避免这个问题。