WebLogic Server 中的 Firebase FCM 问题

问题描述

我正在将 firebase 与 spring mvc 一起使用,并且我正在使用 WebLogic 服务器。
在 WebLogic 服务器上部署时,我的 Firebase 无法正常工作。
如果我在服务器外运行,它的工作和我的 firebase fcm 工作。 当前,当我在 weblogic 服务器中访问我的服务器时出现此错误

Caused by: java.io.IOException: Error getting access token for service account: Hostname verification Failed: HostnameVerifier=weblogic.security.utils.SSLWLSHostnameVerifier,hostname=oauth2.googleapis.com

2021-01-14 17:33:04,348 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] 错误 c.e.c.m.c.NotificationControllerWS - 发送通知失败 com.google.firebase.messaging.FirebaseMessagingException:同时出错 调用 FCM 后端服务 在 com.google.firebase.messaging.FirebaseMessagingClientImpl.sendAll(FirebaseMessagingClientImpl.java:141) 在 com.google.firebase.messaging.FirebaseMessaging$2.execute(FirebaseMessaging.java:293) 在 com.google.firebase.messaging.FirebaseMessaging$2.execute(FirebaseMessaging.java:290) 在 com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36) 在 com.google.firebase.messaging.FirebaseMessaging.sendAll(FirebaseMessaging.java:183) 在 com.google.firebase.messaging.FirebaseMessaging.sendMulticast(FirebaseMessaging.java:252) 在 com.google.firebase.messaging.FirebaseMessaging.sendMulticast(FirebaseMessaging.java:227) 在 com.etisalat.cim.mobileWalletAdapter.controller.NotificationControllerWS.pushNotificationToMobileApp(NotificationControllerWS.java:97) 在 com.etisalat.cim.mobileWalletAdapter.controller.NotificationControllerWS.pushNotifications(NotificationControllerWS.java:78) 在 com.etisalat.cim.mobileWalletAdapter.controller.NotificationControllerWS$$FastClassBySpringcglib$$898ae6ca.invoke() 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 在 org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:669) 在 com.etisalat.cim.mobileWalletAdapter.controller.NotificationControllerWS$$EnhancerBySpringcglib$$56284e04.pushNotifications() 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.web.method.support.invocableHandlerMethod.doInvoke(invocableHandlerMethod.java:205) 在 org.springframework.web.method.support.invocableHandlerMethod.invokeForRequest(invocableHandlerMethod.java:133) 在 org.springframework.web.servlet.mvc.method.annotation.ServletinvocableHandlerMethod.invokeAndHandle(ServletinvocableHandlerMethod.java:97) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 在 org.springframework.web.servlet.dispatcherServlet.dodispatch(dispatcherServlet.java:967) 在 org.springframework.web.servlet.dispatcherServlet.doService(dispatcherServlet.java:901) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:751) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:844) 在 weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) 在 weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) 在 weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) 在 weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346) 在 weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:115) 在 org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:59) 在 org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:90) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:108) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:167) 在 org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.authentication.logout.logoutFilter.doFilter(logoutFilter.java:116) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:122) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402) 在 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 在 weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 在 weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 在 weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285) 在 weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201) 在 weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179) 在 weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572) 在 weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) 在 weblogic.work.ExecuteThread.run(ExecuteThread.java:263) 引起:java.io.IOException:获取服务的访问令牌时出错 帐户:主机名验证失败: HostnameVerifier=weblogic.security.utils.SSLWLSHostnameVerifier,主机名=oauth2.googleapis.com。 在 com.google.auth.oauth2.ServiceAccountCredentials.refreshAccesstoken(ServiceAccountCredentials.java:360) 在 com.google.auth.oauth2.OAuth2Credentials.refresh(OAuth2Credentials.java:165) 在 com.google.auth.oauth2.OAuth2Credentials.getRequestMetadata(OAuth2Credentials.java:151) 在 com.google.auth.http.HttpCredentialsAdapter.initialize(HttpCredentialsAdapter.java:96) 在 com.google.firebase.internal.FirebaseRequestinitializer.initialize(FirebaseRequestinitializer.java:55) 在 com.google.firebase.messaging.FirebaseMessagingClientImpl$1.initialize(FirebaseMessagingClientImpl.java:220) 在 com.google.api.client.http.HttpRequestFactory.buildrequest(HttpRequestFactory.java:88) 在 com.google.api.client.http.HttpRequestFactory.buildPostRequest(HttpRequestFactory.java:128) 在 com.google.api.client.googleapis.batch.BatchRequest.execute(BatchRequest.java:216) 在 com.google.firebase.messaging.FirebaseMessagingClientImpl.sendBatchRequest(FirebaseMessagingClientImpl.java:168) 在 com.google.firebase.messaging.FirebaseMessagingClientImpl.sendAll(FirebaseMessagingClientImpl.java:137) ...省略了102个常见帧引起:javax.net.ssl.SSLKeyException:主机名验证失败: HostnameVerifier=weblogic.security.utils.SSLWLSHostnameVerifier,主机名=oauth2.googleapis.com。 在 weblogic.security.SSL.jsseadapter.JaSSLEngine.doPostHandshake(JaSSLEngine.java:677) 在 weblogic.security.SSL.jsseadapter.JaSSLEngine.doAction(JaSSLEngine.java:748) 在 weblogic.security.SSL.jsseadapter.JaSSLEngine.unwrap(JaSSLEngine.java:132) 在 weblogic.socket.JSSEFilterImpl.unwrap(JSSEFilterImpl.java:603) 在 weblogic.socket.JSSEFilterImpl.unwrapAndHandleResults(JSSEFilterImpl.java:507) 在 weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:96) 在 weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:75) 在 weblogic.socket.JSSESocket.startHandshake(JSSESocket.java:219) 在 weblogic.net.http.HttpsClient.New(HttpsClient.java:563) 在 weblogic.net.http.HttpsClient.New(HttpsClient.java:534) 在 weblogic.net.http.HttpsURLConnection.connect(HttpsURLConnection.java:248) 在 weblogic.net.http.HttpURLConnection.getoutputStream(HttpURLConnection.java:341) 在 com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:108) 在 com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:79) 在 com.google.api.client.http.HttpRequest.execute(HttpRequest.java:995) 在 com.google.auth.oauth2.ServiceAccountCredentials.refreshAccesstoken(ServiceAccountCredentials.java:358) ...省略了 112 个常用帧

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)