RestTemplate 和 OpenFeign 忽略HTTPS安全验证写法

场景: 解决PKIX:unable to find valid certification path to requested target 的问题
  1. Open Feign
	@Configuration
	public class WebConfig {
		@Bean
	    @ConditionalOnMissingBean
	    public Client feignClient() throws NoSuchAlgorithmException, KeyManagementException {
	        SSLContext ctx = SSLContext.getInstance("SSL");
	        X509TrustManager tm = 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 null;
	            }
	        };
	        ctx.init(null, new TrustManager[]{tm}, null);
	        return new Client.Default(ctx.getSocketFactory(),
	                new HostnameVerifier() {
	
	                    @Override
	                    public boolean verify(String hostname, SSLSession session) {
	                        // TODO Auto-generated method stub
	                        return true;
	                    }
	                });
	    }
	}

Feign使用示例

	JsypxRequest request = Feign.builder()
	                .encoder(new GsonEncoder())
	                .decoder(new GsonDecoder())
	                .client(client)
	                .target(BaiduRequest.class, "https://www.baidu.com");
  1. RestTemplate
    public static RestTemplate getInstance(Proxy proxy, int connTimeout, int readTimeout, boolean enableSslCheck) {
        final RestTemplate restTemplate = new RestTemplate();

        // sslIgnore
        SimpleClientHttpRequestFactory requestFactory;
        if (!enableSslCheck) {
            requestFactory = getUnsafeClientHttpRequestFactory();
        } else {
            requestFactory = new SimpleClientHttpRequestFactory();
        }

        // proxy
        if (proxy != null)
            requestFactory.setProxy(proxy);

        // timeout
        requestFactory.setConnectTimeout(connTimeout);
        requestFactory.setReadTimeout(readTimeout);

        restTemplate.setRequestFactory(requestFactory);
        return restTemplate;
    }

    private static SimpleClientHttpRequestFactory getUnsafeClientHttpRequestFactory() {
        TrustManager[] byPassTrustManagers = new TrustManager[]{new X509TrustManager() {

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

            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }
        }};
        final SSLContext sslContext;
        try {
            sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, byPassTrustManagers, new SecureRandom());
            sslContext.getSocketFactory();
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            throw new RuntimeException(e);
        }

        return new SimpleClientHttpRequestFactory() {
            @Override
            protected void prepareConnection(HttpURLConnection connection,
                    @NotNull String httpMethod) throws IOException {
                super.prepareConnection(connection, httpMethod);
                if (connection instanceof HttpsURLConnection) {
                    ((HttpsURLConnection) connection).setSSLSocketFactory(
                            sslContext.getSocketFactory());
                }
            }
        };
    }

    public static RestTemplate getInstance(Proxy proxy, boolean enableSsLCheck) {
        return getInstance(proxy, -1, -1, enableSsLCheck);
    }

RestTemplate 使用示例

restTemplate = getInstance(null ,false);
restTemplate.exchange.....
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element plus 表单验证的js写法可以采用以下方式: 1. 同步校验的写法: ```javascript this.$refs\[formName\].validate((valid) => { console.log('valid result: ' + valid); }); ``` 这种写法可以在表单校验完成后执行回调函数,回调函数中的参数`valid`表示校验结果,可以根据需要进行处理。\[1\] 2. 异步校验的写法: ```javascript this.$refs\[formName\].validate(async (valid) => { if (valid) { // 执行异步校验逻辑 // ... } }); ``` 在异步校验的写法中,可以在校验通过后执行异步校验逻辑。\[1\] 3. 设置验证规则的写法: 可以在表单项(`<el-form-item>`)中单独设置验证规则,例如: ```html <el-form-item label="邮箱:" prop="email" :rules="\[{ type: 'email', message: '邮箱格式错误', trigger: 'change' }\]"></el-form-item> ``` 在这种写法中,通过`prop`属性指定表单项的字段名,通过`:rules`属性设置验证规则,可以设置多个规则,包括类型、错误提示信息和触发时机等。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [element-plus表单验证使用 个人总结](https://blog.csdn.net/ymzhaobth/article/details/120820053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值