Java feign使用okhttp跳过https安全校验

这篇具有很好参考价值的文章主要介绍了Java feign使用okhttp跳过https安全校验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天调用微软Azure OpenAI时报错了,百度一番发现需要https证书,后来想能不能跳过校验呢,费心良苦实验一番终于实现

代码如下

一、添加Maven依赖

     	<dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-core</artifactId>
            <version>8.18.0</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-jackson</artifactId>
            <version>8.18.0</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-okhttp</artifactId>
            <version>8.18.0</version>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.1</version>
        </dependency>

二、添加配置文件

azure:
  prologue: You are a helpful assistant.
  chat-gpt:
    url: https://xxxxx.com/
    key: xxxxxxx
    deployments: xxxxxx

三、添加对内调用接口

public interface AzureApiDao {

    Response sedChatByAzure(AzureChatSendMessage azureChatSendMessage);

}

四、实现层(fegin初始化,跳过校验)

@Slf4j
@Service
public class AzureApiDaoImpl implements AzureApiDao {

    private static AzureChatApi AZURE_CHAT_API;

    @Value("${azure.chat-gpt.url}")
    protected String url;

    @Value("${azure.chat-gpt.key}")
    private String key;

    @Value("${azure.chat-gpt.deployments}")
    private String deployments;


    private static SSLSocketFactory createTrustAllSslSocketFactory(TrustManager[] trustManagers) throws NoSuchAlgorithmException, KeyManagementException {
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustManagers, new SecureRandom());
        return sslContext.getSocketFactory();
    }


    @PostConstruct
    @SneakyThrows
    protected void init() {

        // 1. 创建一个不进行任何证书校验的 TrustManager
        TrustManager[] trustAllCerts = new TrustManager[] {
                new X509TrustManager() {
                    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
                    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
                    public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
                }
        };

        // 2. 创建一个 OkHttpClient.Builder 对象,并将上面创建的 TrustManager 设置到 OkHttpClient.Builder 中
        OkHttpClient.Builder builder = new OkHttpClient.Builder()
                .hostnameVerifier((hostname, session) -> true)
                .sslSocketFactory(createTrustAllSslSocketFactory(trustAllCerts), new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}

                    @Override
                    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}

                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[0];
                    }
                });

        AZURE_CHAT_API = Feign.builder()
                .client(new feign.okhttp.OkHttpClient(builder.build()))
                .decoder(new Decoder.Default())
                .encoder(new JacksonEncoder())
                .errorDecoder(new ErrorDecoder.Default())
                .target(AzureChatApi.class, url);

    }

    @Override
    public Response sedChatByAzure(AzureChatSendMessage azureChatSendMessage) {


        return AZURE_CHAT_API.sendChatMessage(deployments, key, azureChatSendMessage);
    }



}

五、使用Feign调用第三方API(GET)

public interface AzureChatApi {

    /**
     * 聊天消息发送
     */

    @RequestLine("POST /openai/deployments/{deployments}/chat/completions?api-version=2023-05-15")
    @Headers({"Content-Type: application/json","api-key: {key}","Accept: application/octet-stream"})
    Response sendChatMessage(@Param("deployments") String deployments, @Param("key") String key, AzureChatSendMessage messages);

}

OK,齐活~文章来源地址https://www.toymoban.com/news/detail-602492.html

到了这里,关于Java feign使用okhttp跳过https安全校验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【java爬虫】使用selenium通过加载cookie的方式跳过登录

    前言 相信很多人在使用selenium的时候都有一个困惑,就是每一次打开的浏览器实例都是不带cookie的,当有一些页面需要登录操作的时候可能就会比较麻烦,每次都需要手动登录。 其实会造成这个问题的原因是每次打开的浏览器都不会加载本地的cookie,相当于环境被隔离了。

    2024年04月12日
    浏览(42)
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    1.1 什么是幂等? 幂等 是一个数学与计算机科学概念,英文 idempotent [aɪˈdempətənt]。 在数学中,幂等用函数表达式就是: f(x) = f(f(x)) 。比如 求绝对值 的函数,就是幂等的,abs(x) = abs(abs(x))。 计算机科学中,幂等表示 一次和多次请求某一个资源应该具有同样的作用 。 满足幂

    2024年02月05日
    浏览(126)
  • java使用smiley-http-proxy-servlet实现反向代理,跳过SSL认证

            nginx可以实现反向代理,但是有时候需要使用java代码来实现,经过摸索,发现有开源的项目可以实现,所以简单记录一下如何使用         没啥好说         该项目的核心类是ProxyServlet,主要操作都在这个类中实现了,我们可以继承该类,重写其中的方法,自定义

    2024年02月09日
    浏览(43)
  • java https安全传输

    HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全 import java.io.*; import java.net.*; import java.security.*; import java.security.cert.*; import javax.net.ssl.*; public class HttpsURLConnectionTest { private String url = “https://127.0.0.1:8080/TestWeb/version”; private myX509TrustManager

    2024年04月16日
    浏览(38)
  • Java安全——SSL和HTTPS

    SSL和HTTPS SSL提供了在TCP套接字之上的对数据进行加密的方法,也是HTTPS协议的基础 利用JSSE(java安全套接字扩展包)可以像处理协议一样创建和使用SSL套接字,从而支持HTTPS协议 SSL和tcp套接字之间的紧密关系,本身并不是一个加密引擎,但确是Internet上广泛使用的加密技术。 SS

    2024年02月15日
    浏览(52)
  • okhttp下载文件 Java下载文件 javaokhttp下载文件 下载文件 java下载 okhttp下载 okhttp

    示例 http客户端 用的是 okhttp,也可以用 UrlConnetcion或者apache okhttp官网 也可以下载 okhttp jar方式引入 1.1、okhttp发起请求官网Demo 3.1读写内容

    2024年02月12日
    浏览(40)
  • 真实案例:Feign 切换 okhttp 无法生效,被老大骂的有点慌!

    来源:https://www.cnblogs.com/mufeng3421/p/11442412.html 提示:如果只看如何解决问题,请看文章的末尾如何解决这个问题 最近项目中使用了feign当做http请求工具来使用、相对于httpclient、resttemplate来说,fegin用起来方便很多。然后项目有httptrace的需求,需要输出请求日志。 所以就开启

    2024年02月08日
    浏览(38)
  • java使用Validation进行数据校验

    在开发中,我们经常遇到参数校验的需求,比如用户注册的时候,要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式,我们会把校验的代码和真正的业务处理逻辑耦合在一起,而且如果未来要新增一种校验逻辑也需要在

    2024年02月06日
    浏览(35)
  • java https安全传输,997页手淘网络安全面试真题解析火爆全网

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新网络安全全套学习资料》

    2024年04月29日
    浏览(38)
  • java 跳过 SSL

    先用postman 测试下,(https://xxxxxxxx.com 地址)是否能访问成功 若在postman 中设置了,关闭SSL 验证 那java 代码里需要做一定来的变更, pom文件 测试代码

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包