当前位置: 首页 > 知识库问答 >
问题:

使用spring云配置从git repo获取jks文件

白嘉石
2023-03-14

我正在使用spring云配置服务器
在我的一个应用程序中,我得到了一个存储在资源文件夹中的密钥存储:

server.port=443
server.ssl.enabled=true
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=12345678
server.ssl.key-alias=selfsign
server.ssl.keyStoreType=JKS

我想得到密钥库。来自repo的jks,其中包含所有常规属性,如application。属性等。我的问题是:
1。我可以存储吗。git repo上的jks文件并将其提供给我的服务
2。如何确保该文件只转到相应的服务?

谢谢

共有1个答案

龚昊然
2023-03-14

我知道现在已经晚了,但我觉得同样的解决方案可能会帮助其他人实施。几周前,我遇到了相同的问题,我实现了如下相同的问题:在我当前的实现中,我使用以下代码加载jks文件:

Resource res = resLoader.getResource(filePath);
jksKeystore = KeyStore.getInstance("JKS");
jksKeystore.load(res.getInputStream(), clientHeaderInfo());// clientHeaderInfo() method is used to load custom header information

要处理从Spring云配置服务器读取的自定义路径,我们需要将完整的http链接设置为“server.ssl.key store”属性。例子:http://localhost:8888/application/profile/sample.jks?useDefaultLabel=useDefaultLabel

回到定制方面,我们需要将定制协议解析器添加到spring上下文中,如下所示:

@Configuration

public class CustomProtocolResolverRegistrar implements ApplicationContextAware {
@Value("${customurl.prefix:chttp:}")
private String urlPrefix;

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    if (applicationContext instanceof ConfigurableApplicationContext) {
        final ConfigurableApplicationContext configurableApplicationContext
            = (ConfigurableApplicationContext) applicationContext;
        configurableApplicationContext.addProtocolResolver((location, resourceLoader)-> {
            if(StringUtils.hasText(location) && location.startsWith(urlPrefix)) {
                  try {
                      return new CloudResource(location.replace(urlPrefix, ""));
                  }
                  catch (MalformedURLException e) {
                      logger.error("Exception while getting CloudResource : {}",e);
                  }
               }
               return null;
        });
    }
} }

稍后添加CustomResource实现,如下所示:

public class CustomResource extends UrlResource {

private String path;

private URL url;

public CustomResource(URL url) {
    super(url);
    this.url = url;
}

public CustomResource(String path) throws MalformedURLException {
    super(path);
    this.url = new URL(path);
    this.path = path;
}

@Override
public InputStream getInputStream() throws IOException {
    
    URLConnection con = this.url.openConnection();
    con.setRequestProperty(org.springframework.http.HttpHeaders.ACCEPT, MediaType.APPLICATION_OCTET_STREAM_VALUE);
    
    ResourceUtils.useCachesIfNecessary(con);
    try {
        return con.getInputStream();
    }
    catch (IOException e) {
        if (con instanceof HttpURLConnection) {
            ((HttpURLConnection) con).disconnect();
        }
        throw e;
    }
}

最后一步是我们需要自动配置要由spring加载程序拾取的类:创建META-INF/spring。Factorys文件位于resource文件夹下,并自动配置您的类,如下所示:org。springframework。靴子自动配置。启用自动配置。xxx。xxx。xxx。CustomProtocolResolverRegistrar

注意:如果您使用git作为后端,那么应该正确配置basepath,以便将jks文件发送到客户端请求。它应该解决上述问题。

如果有其他更好的方法,请纠正我。

 类似资料:
  • 我刚刚将我们的Spring Boot项目从引导升级到v2.6.2,从Spring Cloud升级到2021.0.0。 现在,我的远程配置获取没有任何效果,应用程序也无法获取正确的属性文件 [main]INFO o. s. c. c. c. ConfigServiceProperty tySourceLocator-从服务器获取配置:http://localhost:8080 [main]WARN

  • 我是Spring Cloud的新手,我正在尝试使用存储在github上的属性文件连接服务器和客户端。 我的服务器应用程序。yml文件的配置如下: github回购协议链接在这里,主要属性和替代属性 我的客户端应用程序具有以下设置 Rest控制器是: 所有${变量}van都可以在位于git存储库中的属性文件中找到。 服务器运行正常,但是客户端给了我以下错误 创建名为“rateController”的

  • 我正在尝试这样做: https://developers.google.com/identity/sign-in/web/backend-auth#calling-the-tokeninfo-endpoint 我用CLIENT_ID复制了粘贴的Java代码,但是除了用户标识、电子邮件和电子邮件验证之外,我无法获得任何更多的信息。idTokenString验证确定。还有其他人可以这样做吗? 我要求这

  • 不管配置文件名如何,是否有任何方法可以将当前加载的配置传递给PropertySource?从cloud config成功获取配置后收到的日志,用于应用程序:web-server profile:LOCAL

  • 我想实现以下目标: 在“开发”模式下,在当前webapp中执行Spring云配置 因此,当前webapp的类路径包含对配置服务器和客户端的依赖关系: 在开发模式下,并在引导程序中具有以下属性。yml,没问题(嵌入式配置服务器已配置并启动) 当不在'dev'模式(例如spring.profiles.active=prod)时,当前的webapp不会启动:它无法自动装配我的属性(我猜嵌入式服务器是以错

  • 我有一个从Spring Cloud config server(纯模式)获取配置的Spring Boot应用程序。配置服务器加载的配置位置中的基本application.yml文件包含以下内容: 当到达配置服务器(http://mygateway/config-server/myapp/test)的endpoint时,我会返回在配置文件“test”中运行的“myapp”应用程序的以下内容: 在测试