首页 > 其他分享 >spring RestTemplate忽略证书验证

spring RestTemplate忽略证书验证

时间:2024-08-08 11:27:12浏览次数:6  
标签:supportedMediaTypes 证书 spring RestTemplate MediaType add new import

要使RestTemplate忽略SSL证书验证,你可以配置一个自定义的SSLContext,然后将其注入到RestTemplate使用的HttpClient中。以下是一个示例代码:

import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.http.MediaType;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;

public class RestTemplateConfig {

    /**
     * 我们创建了一个SSLContext,它会接受所有的SSL证书,而不进行验证。
     * 然后我们创建了一个SSLConnectionSocketFactory,它使用这个SSLContext,并且提供了一个NoopHostnameVerifier,
     * 这个Verifier不会进行主机名验证。
     * 最后,我们创建了一个配置了这个SSLConnectionSocketFactory的HttpClient,并将其设置为RestTemplate工厂的HttpClient。
     * @return RestTemplate
     */
    public static RestTemplate createRestTemplate() {
        try {

            //SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (x509Certificates, s) -> true).build();
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                @Override
                public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                    return true;
                }
            }).build();
            SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
            HttpClient httpClient = HttpClients.custom()
                    .setSSLSocketFactory(socketFactory)
                    .build();

            HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
            factory.setHttpClient(httpClient);

            RestTemplate restTemplate=new RestTemplate(factory);

            FastJsonHttpMessageConverter converter=mediaType();
            restTemplate.getMessageConverters().add(converter);
            return restTemplate;
        //} catch (KeyManagementException | NoSuchAlgorithmException e) {
        } catch (Exception e) {
            throw new RuntimeException("Failed to create RestTemplate", e);
        }
    }

    private static FastJsonHttpMessageConverter mediaType(){
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        supportedMediaTypes.add(MediaType.APPLICATION_PDF);
        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XML);
        supportedMediaTypes.add(MediaType.IMAGE_GIF);
        supportedMediaTypes.add(MediaType.IMAGE_JPEG);
        supportedMediaTypes.add(MediaType.IMAGE_PNG);
        supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
        supportedMediaTypes.add(MediaType.TEXT_HTML);
        supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        supportedMediaTypes.add(MediaType.TEXT_XML);
        converter.setSupportedMediaTypes(supportedMediaTypes);
        return converter;
    }

}

在这个示例中,我们创建了一个SSLContext,它会接受所有的SSL证书,而不进行验证。然后我们创建了一个SSLConnectionSocketFactory,它使用这个SSLContext,并且提供了一个NoopHostnameVerifier,这个Verifier不会进行主机名验证。最后,我们创建了一个配置了这个SSLConnectionSocketFactoryHttpClient,并将其设置为RestTemplate工厂的HttpClient

请注意,忽略SSL证书验证会降低安全性,因此应该只在你完全理解潜在的安全风险的情况下使用,通常这种做法只适用于开发或测试环境。

标签:supportedMediaTypes,证书,spring,RestTemplate,MediaType,add,new,import
From: https://www.cnblogs.com/luxj/p/18348610

相关文章

  • Springboot + ThymeLeaf发送邮件
    前言本文介绍了如何使用SpringBoot中的JavaMailSender发送邮件,包括配置发件箱相关参数以及如何结合模板引擎如Thymeleaf发送HTML邮件。1、导入jar包。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>......
  • Spring Boot 整合 SA-Token 使用详解
    SpringBoot整合SA-Token使用详解在现代Web开发中,用户认证与授权是构建安全应用的基础。SA-Token是一个轻量级的Java权限认证框架,它以其简洁的API设计、高效的执行效率以及丰富的功能特性,成为了众多开发者在SpringBoot项目中实现用户认证与授权的首选方案。本文将详细......
  • springboot集成 AI 实现图片辅助设计功能
    springboot集成AI实现图片辅助设计功能在SpringBoot中实现一个图片辅助设计功能,通常会涉及到图像处理、计算机视觉以及机器学习(AI)技术的应用。这样的系统可以帮助用户进行图像编辑、风格转换、自动设计布局等。以下是一个基本步骤和技术栈建议,用于在SpringBoot中构建图......
  • springboot英语学习平台 毕业设计源码89605
                           摘 要随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,......
  • 基于Spring Boot的高校就业招聘系统设计与实现
    ......
  • Spring AOP:面向切面编程的最佳实践 ( 一 )
    1.AOP思想1.1.为什么需要面向切面编程如果在一个类或者多个类的多个业务逻辑方法中,在开始,结尾部分包含功能相同的代码称之为横切关注点也叫切面,这种结构可能符合传统的面向对象编程(OOP)的封装特性,但可能导致代码难以维护和扩展。面向切面编程是一种编程范式。它允......
  • 基于SpringBoot教学管理系统的设计与实现(源码+LW+调试文档+讲解等)
     博主介绍:  ......
  • 基于SpringBoot大学生家教管理系统的设计与实现(源码+LW+调试文档+讲解等)
    博主介绍:  ......
  • SpringIOC整合dbUtil做的增删改查以及转账业务的实现
    目录一、xml方式实现1.介绍lombok插件2.功能3.步骤3.1idea安装插件(只做一次)3.2添加坐标 3.3编写注解4.核心类4.1QueryRunner4.2query()查询4.3update()增删改5.配置文件applicationContext.xml6.junit测试6.1使用步骤6.1.1坐标6.1.2注解(修饰方......
  • spring 代码执⾏ (CVE-2018-1273)漏洞
    一漏洞简介SpringData是⼀个⽤于简化数据库访问,并⽀持云服务的开源框架,SpringDataCommons是SpringData下所有⼦项⽬共享的基础框架。SpringDataCommons在2.0.5及以前版本中,存在⼀处SpEL表达式注⼊漏洞,攻击者可以注⼊恶意SpEL表达式以执⾏任意命令    ......