如何使用Spring Boot和Tomcat指定我的.keystore文件?

戴夫

我正在尝试设置Spring Security以与Spring Boot的嵌入式Tomcat实例一起使用。有很多基本示例可以执行此操作,但我被困在它们的后面,他们通过HTTP(不是HTTPS)执行基本身份验证。

如果可以访问Tomcat配置文件(server.xml),我可能可以使它工作,但是由于Spring Boot使用嵌入式Tomcat实例(否则非常方便),因此我无权访问Tomcat配置文件(至少不能访问Tomcat配置文件)。我的知识)。

可能有一个application.properties设置,但是我无法对其进行跟踪。我看过对某个server.contextPath字段的引用application.properties,我怀疑这可能与替换Tomcat配置文件有关。即使是相关的,我也仍然不知道从哪里开始-我看到的所有Tomcat SSL指令都是从编辑现有server.xml文件开始的,而不是从头开始构建一个。

可以通过Spring Boot来完成(通过某种方式指定snippetserver.xml或通过其他方式)吗?如果没有,最简单的方法是什么?我知道我可能需要排除Spring Boot的Tomcat组件,但如果可能的话,我希望避免这样做。

戴夫

事实证明,有一种方法可以执行此操作,尽管我不确定自己是否找到了“正确”方法,因为这需要花费多个小时从多个项目中读取源代码。换句话说,这可能是很多愚蠢的工作(但它可以工作)。

首先,无法获得嵌入式Tomcat中的server.xml,无法对其进行扩充或替换。这必须以编程方式完成。

其次,“ require_https”设置无济于事,因为您不能以这种方式设置证书信息。确实设置了从http到https的转发,但是它没有让您使用https的方法,因此转发无济于事。然而,下面的东西,它使用它确实使HTTPS工作。

首先,您需要提供EmbeddedServletContainerFactory嵌入式Servlet容器支持”文档中所述的这些文档是针对Java的,但Groovy看起来几乎一样。请注意,我无法让它识别出@Value他们的示例中使用注释,但这不是必需的。对于groovy,只需将其放入新的.groovy文件中,并在启动spring启动时在命令行中包含该文件

现在,指令说明您可以自定义TomcatEmbeddedServletContainerFactory在该代码中创建类,以便可以更改web.xml行为,这是正确的,但是出于我们的目的,重要的是要知道您也可以使用它来调整server.xml行为。确实,阅读该类的源代码并将其与Embedded Tomcat文档进行比较,您会发现这是唯一的实现方式。有趣的功能是TomcatEmbeddedServletContainerFactory.addConnectorCustomizers(),从Javadocs看来可能并不多,但实际上为您提供了嵌入式Tomcat对象以自定义您自己。只需传递您自己的实现,TomcatConnectorCustomizer然后Connectorvoid customize(Connector con)函数中的给定上设置所需的内容现在,您可以使用十亿左右的内容,但Connector我找不到有用的文档,但是createConnector()这个家伙Spring嵌入式的Tomcat项目中的功能是非常实用的指南。我的实现最终看起来像这样:

package com.deepdownstudios.server

import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.*
import org.springframework.stereotype.*

@Configuration
class MyConfiguration {

@Bean
public EmbeddedServletContainerFactory servletContainer() {
final int port = 8443;
final String keystoreFile = "/path/to/keystore"
final String keystorePass = "keystore-password"
final String keystoreType = "pkcs12"
final String keystoreProvider = "SunJSSE"
final String keystoreAlias = "tomcat"

TomcatEmbeddedServletContainerFactory factory = 
        new TomcatEmbeddedServletContainerFactory(this.port);
factory.addConnectorCustomizers( new TomcatConnectorCustomizer() {
    void    customize(Connector con) {
        Http11NioProtocol proto = (Http11NioProtocol) con.getProtocolHandler();
            proto.setSSLEnabled(true);
        con.setScheme("https");
        con.setSecure(true);
        proto.setKeystoreFile(keystoreFile);
        proto.setKeystorePass(keystorePass);
        proto.setKeystoreType(keystoreType);
        proto.setProperty("keystoreProvider", keystoreProvider);
        proto.setKeyAlias(keystoreAlias);
    }
});
return factory;
}
}

Autowiring将自动执行此实现。一旦我修复了损坏的密钥库文件(确保您使用调用keytool -storetype pkcs12,而不是-storepass pkcs12在其他地方报告过),此方法就可以了。另外,最好提供参数(端口,密码等)作为测试的配置设置,例如……我敢肯定,如果您可以使用@Value批注与Groovy一起使用,那是有可能的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何以编程方式为Spring Boot和Tomcat提供密钥库文件?

来自分类Dev

如何防止spring boot同时登录到指定文件和catalina.out

来自分类Dev

如何使用ajax文件上传和spring mvc上传文件?

来自分类Dev

解密我的文件时出现 AEADBadTagException Android Keystore AES Cipher

来自分类Dev

如何在Java中更改KeyStore文件的密码?

来自分类Dev

使用angularjs和spring boot上传文件

来自分类Dev

Cloud Spring Boot如何使用yml文件中的属性

来自分类Dev

如何使用Spring Boot从Java属性文件读取数据

来自分类Dev

如何使用Spring Boot和Liquibase Changeset Yaml文件访问系统属性

来自分类Dev

在外部 tomcat 上使用 Spring Boot 配置文件

来自分类Dev

如何在tomcat服务器上的单个war或jar文件中使用spring boot部署angular 5

来自分类Dev

如何使用Tomcat 8 + Spring Boot + Maven

来自分类Dev

如何使用Eclipse中生成的Keystore文件从Android-Studio发布Android应用?

来自分类Dev

Spring Boot Maven如何构建war和jar文件

来自分类Dev

在EC2 Spring(javapns)上载applestore通知的keystore.p12文件的位置

来自分类Dev

如何使用嵌入式Tomcat 8和Spring Boot将子域转换为路径

来自分类Dev

使用Spring Boot和Thymeleaf创建文件下载链接

来自分类Dev

Spring Boot是否支持同时使用属性和yml文件?

来自分类Dev

使用Spring Boot和Thymeleaf上传多个文件

来自分类Dev

如何使用嵌入式Tomcat将JNDI数据库连接与Spring Boot和Spring Data结合使用?

来自分类Dev

我该如何解决这个问题,在浏览器中下载文件时,它会更改文件中的编码,我使用的是 Spring Boot

来自分类Dev

我的应用程序如何访问Tomcat server.xml中配置的keyStore.jks

来自分类Dev

如何将 java KeyStore 转换为 PKCS7 .p7b 文件?

来自分类Dev

使用keytool更改密码时,从Java Keystore中提取PKCS12文件

来自分类Dev

我们应该将KeyStore和TrustStore指向同一个.jks文件吗?

来自分类Dev

Tomcat无法开始使用Eclipse,JRebel和Spring Boot

来自分类常见问题

如何使用Spring Boot以编程方式确定当前活动配置文件

来自分类Dev

如何使用Spring Boot / slf4j在日志文件的名称中包含日期?

来自分类常见问题

如何配置spring-boot以使用基于文件的H2数据库

Related 相关文章

  1. 1

    如何以编程方式为Spring Boot和Tomcat提供密钥库文件?

  2. 2

    如何防止spring boot同时登录到指定文件和catalina.out

  3. 3

    如何使用ajax文件上传和spring mvc上传文件?

  4. 4

    解密我的文件时出现 AEADBadTagException Android Keystore AES Cipher

  5. 5

    如何在Java中更改KeyStore文件的密码?

  6. 6

    使用angularjs和spring boot上传文件

  7. 7

    Cloud Spring Boot如何使用yml文件中的属性

  8. 8

    如何使用Spring Boot从Java属性文件读取数据

  9. 9

    如何使用Spring Boot和Liquibase Changeset Yaml文件访问系统属性

  10. 10

    在外部 tomcat 上使用 Spring Boot 配置文件

  11. 11

    如何在tomcat服务器上的单个war或jar文件中使用spring boot部署angular 5

  12. 12

    如何使用Tomcat 8 + Spring Boot + Maven

  13. 13

    如何使用Eclipse中生成的Keystore文件从Android-Studio发布Android应用?

  14. 14

    Spring Boot Maven如何构建war和jar文件

  15. 15

    在EC2 Spring(javapns)上载applestore通知的keystore.p12文件的位置

  16. 16

    如何使用嵌入式Tomcat 8和Spring Boot将子域转换为路径

  17. 17

    使用Spring Boot和Thymeleaf创建文件下载链接

  18. 18

    Spring Boot是否支持同时使用属性和yml文件?

  19. 19

    使用Spring Boot和Thymeleaf上传多个文件

  20. 20

    如何使用嵌入式Tomcat将JNDI数据库连接与Spring Boot和Spring Data结合使用?

  21. 21

    我该如何解决这个问题,在浏览器中下载文件时,它会更改文件中的编码,我使用的是 Spring Boot

  22. 22

    我的应用程序如何访问Tomcat server.xml中配置的keyStore.jks

  23. 23

    如何将 java KeyStore 转换为 PKCS7 .p7b 文件?

  24. 24

    使用keytool更改密码时,从Java Keystore中提取PKCS12文件

  25. 25

    我们应该将KeyStore和TrustStore指向同一个.jks文件吗?

  26. 26

    Tomcat无法开始使用Eclipse,JRebel和Spring Boot

  27. 27

    如何使用Spring Boot以编程方式确定当前活动配置文件

  28. 28

    如何使用Spring Boot / slf4j在日志文件的名称中包含日期?

  29. 29

    如何配置spring-boot以使用基于文件的H2数据库

热门标签

归档