凡事都在事上磨,这样才能精进,成长进步提高! ------ 博客园首页

解决报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol

目录
一、场景
二、报错信息
三、原因
四、排查
五、解决
一、场景
使用对象存储进行文件上传时报错

注:该问题只要需要用到http的都有可能出现,不是只针对对象存储

二、报错信息
com.hitachivantara.hcp.common.ex.InvalidResponseException: com.hitachivantara.core.http.ex.HttpException: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at com.hitachivantara.hcp.common.HCPHttpClient.execute(HCPHttpClient.java:163)
at com.hitachivantara.hcp.common.AbstractHCPClient.execute(AbstractHCPClient.java:62)
at com.hitachivantara.hcp.standard.body.impl.HCPNamespaceImpl.putObject(HCPNamespaceImpl.java:336)
at com.hitachivantara.hcp.standard.body.impl.HCPNamespaceImpl.putObject(HCPNamespaceImpl.java:420)
at com.xxx.util.HuaRunOBSUtil.putObjectByInput(HuaRunOBSUtil.java:307)
at com.xxx.util.OBSUtil.putObjectByInput(OBSUtil.java:382)
at com.xxx.order.order.service.impl.SzFileServiceImpl.saveFile(SzFileServiceImpl.java:60)
at com.xxx.order.order.service.impl.SzFileServiceImplFastClassBySpringCGLIBFastClassBySpringCGLIB7b5e32f1.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386)
at org.springframework.aop.framework.CglibAopProxy.access000(CglibAopProxy.java:85)atorg.springframework.aop.framework.CglibAopProxy000(CglibAopProxy.java:85)atorg.springframework.aop.framework.CglibAopProxyDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704)
at com.xxx.order.order.service.impl.SzFileServiceImplEnhancerBySpringCGLIBEnhancerBySpringCGLIBc58c4d2b.saveFile(<generated>)
at com.xxx.order.order.controller.SzFileController.uploadFileFour(SzFileController.java:63)
at com.xxx.order.order.controller.SzFileControllerFastClassBySpringCGLIBFastClassBySpringCGLIB835bd31d.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)atorg.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)atorg.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.transaction.interceptor.TransactionInterceptor1.proceedWithInvocation(TransactionInterceptor.java:123)atorg.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)atorg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)atorg.springframework.aop.framework.CglibAopProxy1.proceedWithInvocation(TransactionInterceptor.java:123)atorg.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)atorg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)atorg.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.aop.framework.CglibAopProxyDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)atcom.xxx.order.order.controller.SzFileControllerDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)atcom.xxx.order.order.controller.SzFileControllerEnhancerBySpringCGLIBEnhancerBySpringCGLIBd7c4a92f.uploadFileFour(<generated>)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:498)atorg.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)atorg.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:515)atorg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:583)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:212)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.security.web.FilterChainProxyd7c4a92f.uploadFileFour(<generated>)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:498)atorg.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)atorg.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:515)atorg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:583)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:212)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:337)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)atorg.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)atorg.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)
at com.xxx.power.jwt.a.doFilterInternal(JwtAuthenticationTokenFilter.java:207)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)atorg.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)atorg.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)
at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atorg.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxyVirtualFilterChain.doFilter(FilterChainProxy.java:346)atorg.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)atorg.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)atorg.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)atorg.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126)atorg.springframework.boot.web.servlet.support.ErrorPageFilter.access000(ErrorPageFilter.java:64)
at org.springframework.boot.web.servlet.support.ErrorPageFilter1.doFilterInternal(ErrorPageFilter.java:101)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atorg.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)atorg.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:679)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)atorg.apache.coyote.http11.Http11Processor.service(Http11Processor.java:617)atorg.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)atorg.apache.coyote.AbstractProtocolConnectionHandler.process(AbstractProtocol.java:934)
at org.apache.tomcat.util.net.NioEndpointSocketProcessor.doRun(NioEndpoint.java:1698)atorg.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)atorg.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)atorg.apache.tomcat.util.threads.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Caused by: com.hitachivantara.core.http.ex.HttpException: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at com.hitachivantara.core.http.client.impl.ApacheHttpClient.request(ApacheHttpClient.java:63)
at com.hitachivantara.core.http.client.HttpClientBase.execute(HttpClientBase.java:68)
at com.hitachivantara.core.http.util.HttpClientAgency.request(HttpClientAgency.java:132)
at com.hitachivantara.core.http.util.HttpClientAgency.request(HttpClientAgency.java:103)
at com.hitachivantara.hcp.common.HCPHttpClient.execute(HCPHttpClient.java:136)
... 130 common frames omitted
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:103)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:227)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:433)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:436)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:384)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at com.hitachivantara.core.http.client.impl.ApacheHttpClient.request(ApacheHttpClient.java:56)
... 134 common frames omitted
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
三、原因
jdk的java.security文件存在配置问题

服务器使用的TLS协议被禁用了

四、排查
1、查看当前服务器使用的jdk版本

命令:java -version

 

2、查看该jdk的安装目录

命令:find / -name java.security

这里选择通过搜索java.security来确定安装目录

 

3、查看java.security文件

 

4、通过tcpdump命令进行抓包,以确认服务器使用的TLS协议

tcpdump host IP或域名 -w 文件名.pcap
1
示例:tcpdump host 192.168.1.100 -w tcpdump.pcap
说明:获取主机为192.168.1.100的交互信息,并写入到当前目录的tcpdump.pcap文件

5、使用Wireshark查看抓包信息

 

使用TLS协议为TLSv1,该协议在java.security中已被禁用

五、解决
将java.security文件的SSLv3, TLSv1, TLSv1.1删除后,重启服务即可

这里只删除TLSv1也是可以的,不过为了不在遇到相同的问题,这里不禁用任何TLS协议

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_52116015/article/details/135764448

posted @   追风fc  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2022-03-30 thymeleaf取list下标
点击右上角即可分享
微信分享提示