java.net.MalformedURLException:未知协议:Spring启动升级后来自tomcat的类路径

时间:2018-04-20 11:22:23

标签: java spring tomcat spring-boot

我将Spring Boot上的项目从2.0.0.M7升级到2.0.1,我的ssl配置已经破解。 我在资源目录中有我的密钥库/信任库,以及指向它们的application.yml中的属性。

application.yml

server:
  schema: "https"
  address: "localhost"
  port: 8080
  sslPort: 8443
  servlet:
    session:
      timeout: 900

spring:
  profiles:
    active: dev

ssl:
  keystoreFile: classpath:.keystore
  keystorePass: ****
  truststoreFile: classpath:.truststore
  truststorePass: ****

我使用属性在我的@Configuration类中构建ssl连接器。 这里的sslProperties对象包含来自上面的application.yml的ssl部分的所有属性。

private Connector createSslConnector(WebServerProperties webServerProperties, SslProperties sslProperties) {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();

    connector.setScheme(WebServerProperties.HTTPS_SCHEMA);
    connector.setSecure(true);
    connector.setPort(webServerProperties.getSslPort());

    protocol.setSSLEnabled(true);
    protocol.setKeystoreFile(sslProperties.getKeystoreFile());
    protocol.setKeystorePass(sslProperties.getKeystorePass());
    protocol.setKeyPass(sslProperties.getKeyPass());
    protocol.setKeyAlias(sslProperties.getKeyAlias());
    protocol.setCiphers(sslProperties.getCiphers());
    protocol.setSslEnabledProtocols(sslProperties.getSslProtocols());

    return connector;
}

升级后,应用程序不会以下面的异常开始

org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8443]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:367)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:107)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:86)
    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:409)
    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:174)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
    at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:137)
    at net.twisteddna.Application.main(Application.java:37)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:995)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    ... 19 common frames omitted
Caused by: java.lang.IllegalArgumentException: unknown protocol: classpath
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:116)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:87)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1086)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:268)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
    at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:68)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:993)
    ... 20 common frames omitted
Caused by: java.net.MalformedURLException: unknown protocol: classpath
    at java.net.URL.<init>(URL.java:600)
    at java.net.URL.<init>(URL.java:490)
    at java.net.URL.<init>(URL.java:439)
    at java.net.URI.toURL(URI.java:1089)
    at org.apache.tomcat.util.file.ConfigFileLoader.getInputStream(ConfigFileLoader.java:95)
    at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:132)
    at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:204)
    at org.apache.tomcat.util.net.jsse.JSSEUtil.getKeyManagers(JSSEUtil.java:184)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:114)
    ... 27 common frames omitted

Spring Boot 2.0.0.M7包含tomcat-embed-core-8.5.23,其中AbstractHttp11Protocol为。 Spring Boot 2.0.1有tomcat-embed-core-8.5.29。 而较新的tomcat版本似乎忘记了如何从类路径中读取

0 个答案:

没有答案