当前位置: 首页 > 面试题库 >

在春季,resttemplate发出的每个请求都发送客户证书的正确方法是什么?

麹凯捷
2023-03-14
问题内容

我想在我的spring应用程序中使用REST服务。要访问该服务,我需要获得客户端证书(自行签名并以.jks格式)。对其余服务进行身份验证的正确方法是什么?

这是我的要求:

public List<Info> getInfo() throws RestClientException, URISyntaxException {

    HttpEntity<?> httpEntity = new HttpEntity<>(null, new HttpHeaders());

    ResponseEntity<Info[]> resp = restOperations.exchange(
            new URI(BASE_URL + "/Info"), HttpMethod.GET, 
            httpEntity, Info[].class);
    return Arrays.asList(resp.getBody());
}

问题答案:

这是使用RestTemplate和Apache
HttpClient的
方法示例

您应该RestTemplate使用配置的SSL上下文定义自己的:

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {
    char[] password = "password".toCharArray();

    SSLContext sslContext = SSLContextBuilder.create()
            .loadKeyMaterial(keyStore("classpath:cert.jks", password), password)
            .loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();

    HttpClient client = HttpClients.custom().setSSLContext(sslContext).build();
    return builder
            .requestFactory(new HttpComponentsClientHttpRequestFactory(client))
            .build();
}

 private KeyStore keyStore(String file, char[] password) throws Exception {
    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    File key = ResourceUtils.getFile(file);
    try (InputStream in = new FileInputStream(key)) {
        keyStore.load(in, password);
    }
    return keyStore;
}

现在,此模板执行的所有远程呼叫将使用签名cert.jks注意 :您需要将其cert.jks放入类路径中

@Autowired
private RestTemplate restTemplate;

public List<Info> getInfo() throws RestClientException, URISyntaxException {
    HttpEntity<?> httpEntity = new HttpEntity<>(null, new HttpHeaders());

    ResponseEntity<Info[]> resp = restTemplate.exchange(
            new URI(BASE_URL + "/Info"), HttpMethod.GET, 
            httpEntity, Info[].class);
    return Arrays.asList(resp.getBody());
}


 类似资料:
  • 问题内容: 嗨,我在重定向期间收到了下一个错误: 客户端发送的请求在语法上不正确 浏览器显示的URL是:在这里,我的类首先重定向-“从”重定向,然后“重定向到”: 第二类: 解决 :我解决了这个问题,第二类的方法中有多余的参数。 问题答案: 在这种情况下,将登录级别设置为in 例如,当缺少参数或无法将其转换为所需的类型时,日志中将出现异常详细信息。

  • 我希望在调试这个问题时得到一些帮助。如果我将以下JSON发送到后端,它将正常工作: 但是,如果我现在发送以下内容: 我得到了上面的错误。在我的后端代码中,我有以下代码: API 方法签名如下所示: 我认为我遇到的问题是JSON不能被解析为ZonedDateTime。有人对以下两个问题有什么建议吗?( json字符串格式ZonedDateTime自动接受什么时间,( 2)如何创建DTO来解析zone

  • 嗨,我是spring MVC的新手,正在尝试一些简单的例子。 我在eclipse中使用archtype'spring-mvc-archtype'创建了一个新的spring mvc maven项目。 我正试图点击一个url并在映射 中使用@pathparam访问PathVariables 这是我的控制器类 下面是Configuration类 因此,当我运行它并点击http://localhost:8

  • 问题内容: 我在同一个主题上看过几个qts。但是我没有发现此错误的任何线索。 我正在研究POC,并点击下面的链接。 http://spring.io/guides/gs/uploading- files/ 如以上教程中所述,在独立模式下(春季嵌入式Tomcat),它可以正常工作。但是我想将其部署为Web应用程序。因此,我创建了一个单独的SpringMVC项目并添加了以下控制器。 控制器文件 我已经

  • 我有这个代码: 我一直在犯这样的错误: java:不兼容的类型:com。应用句子分类请求。无法将生成器转换为com。应用句子分类请求 我已经使用Maven插件生成了gRPC Java文件。在看了多个例子后,我不确定我的问题是什么。

  • 这里是LocationSearchMetaData.java 我的控制器 我的客户要求是这样的 下面是实际数据请求 获取时出错I: