spring boot集成WebSocket后发现咋都请求不到,日志输出只有一行
Initializing Spring DispatcherServlet 'dispatcherServlet'
把项目的日志等级改成了trace
级别后,日志输出如下
2024-11-14 15:13:35,862 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] INFO o.a.c.c.C.[.[.[/light_show] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-11-14 15:13:35,869 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] INFO o.s.w.s.DispatcherServlet - [initServletBean,525] - Initializing Servlet 'dispatcherServlet'
2024-11-14 15:13:35,870 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'multipartResolver'
2024-11-14 15:13:35,871 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [initMultipartResolver,519] - Detected org.springframework.web.multipart.support.StandardServletMultipartResolver@1f233bc0
2024-11-14 15:13:35,871 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'localeResolver'
2024-11-14 15:13:35,871 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [initLocaleResolver,543] - Detected org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@7ea9059c
2024-11-14 15:13:35,871 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'themeResolver'
2024-11-14 15:13:35,872 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [initThemeResolver,568] - Detected org.springframework.web.servlet.theme.FixedThemeResolver@3a9a1550
2024-11-14 15:13:35,878 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'webSocketHandlerMapping'
2024-11-14 15:13:35,878 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'welcomePageHandlerMapping'
2024-11-14 15:13:35,879 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'requestMappingHandlerMapping'
2024-11-14 15:13:35,879 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'viewControllerHandlerMapping'
2024-11-14 15:13:35,879 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'beanNameHandlerMapping'
2024-11-14 15:13:35,879 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'routerFunctionMapping'
2024-11-14 15:13:35,879 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'resourceHandlerMapping'
2024-11-14 15:13:35,879 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'defaultServletHandlerMapping'
2024-11-14 15:13:35,880 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'requestMappingHandlerAdapter'
2024-11-14 15:13:35,880 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'handlerFunctionAdapter'
2024-11-14 15:13:35,880 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'httpRequestHandlerAdapter'
2024-11-14 15:13:35,880 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'simpleControllerHandlerAdapter'
2024-11-14 15:13:35,883 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'errorAttributes'
2024-11-14 15:13:35,883 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'handlerExceptionResolver'
2024-11-14 15:13:35,883 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'viewNameTranslator'
2024-11-14 15:13:35,883 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [initRequestToViewNameTranslator,718] - Detected DefaultRequestToViewNameTranslator
2024-11-14 15:13:35,883 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'beanNameViewResolver'
2024-11-14 15:13:35,884 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'mvcViewResolver'
2024-11-14 15:13:35,884 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'defaultViewResolver'
2024-11-14 15:13:35,884 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'viewResolver'
2024-11-14 15:13:35,884 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'flashMapManager'
2024-11-14 15:13:35,884 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [initFlashMapManager,782] - Detected SessionFlashMapManager
2024-11-14 15:13:35,884 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.w.s.DispatcherServlet - [initServletBean,542] - enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data
2024-11-14 15:13:35,884 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] INFO o.s.w.s.DispatcherServlet - [initServletBean,547] - Completed initialization in 15 ms
2024-11-14 15:13:35,892 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.d.r.c.RedisConnectionUtils - [doGetConnection,143] - Fetching Redis Connection from RedisConnectionFactory
2024-11-14 15:13:35,910 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.d.r.c.RedisConnectionUtils - [doCloseConnection,389] - Closing Redis Connection.
2024-11-14 15:13:35,914 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.w.s.f.OrderedRequestContextFilter - [initContextHolders,115] - Bound request context to thread: org.apache.catalina.connector.RequestFacade@4869c438
2024-11-14 15:13:35,915 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'springSecurityFilterChain'
2024-11-14 15:13:35,922 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [getFilters,233] - Trying to match request against DefaultSecurityFilterChain [RequestMatcher=any request, Filters=[org.springframework.security.web.session.DisableEncodeUrlFilter@7e0d15b3, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@1637d945, org.springframework.security.web.context.SecurityContextPersistenceFilter@200a935e, org.springframework.security.web.header.HeaderWriterFilter@6b1488ab, org.springframework.web.filter.CorsFilter@1b3d9cf9, org.springframework.security.web.authentication.logout.LogoutFilter@1349e908, org.springframework.web.filter.CorsFilter@1b3d9cf9, com.light.framework.security.filter.JwtAuthenticationTokenFilter@1460bdbd, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@2cd8193, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3f918450, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6d594fcd, org.springframework.security.web.session.SessionManagementFilter@4974ecb3, org.springframework.security.web.access.ExceptionTranslationFilter@74ba9852, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@65dd5073]] (1/1)
2024-11-14 15:13:35,925 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.FilterChainProxy - [doFilterInternal,218] - Securing GET /api/websocket/1?sid=1
2024-11-14 15:13:35,926 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking DisableEncodeUrlFilter (1/14)
2024-11-14 15:13:35,926 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking WebAsyncManagerIntegrationFilter (2/14)
2024-11-14 15:13:35,930 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking SecurityContextPersistenceFilter (3/14)
2024-11-14 15:13:35,932 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.c.SecurityContextPersistenceFilter - [doFilter,104] - Set SecurityContextHolder to empty SecurityContext
2024-11-14 15:13:35,933 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking HeaderWriterFilter (4/14)
2024-11-14 15:13:35,934 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking CorsFilter (5/14)
2024-11-14 15:13:35,939 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking LogoutFilter (6/14)
2024-11-14 15:13:35,939 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.l.LogoutFilter - [requiresLogout,117] - Did not match request to Or [Ant [pattern='/logout', GET], Ant [pattern='/logout', POST], Ant [pattern='/logout', PUT], Ant [pattern='/logout', DELETE]]
2024-11-14 15:13:35,939 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking CorsFilter (7/14)
2024-11-14 15:13:35,939 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking JwtAuthenticationTokenFilter (8/14)
2024-11-14 15:13:35,941 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking RequestCacheAwareFilter (9/14)
2024-11-14 15:13:35,942 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking SecurityContextHolderAwareRequestFilter (10/14)
2024-11-14 15:13:35,943 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking AnonymousAuthenticationFilter (11/14)
2024-11-14 15:13:35,944 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.AnonymousAuthenticationFilter - [doFilter,96] - Set SecurityContextHolder to AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=null], Granted Authorities=[ROLE_ANONYMOUS]]
2024-11-14 15:13:35,944 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking SessionManagementFilter (12/14)
2024-11-14 15:13:35,945 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking ExceptionTranslationFilter (13/14)
2024-11-14 15:13:35,945 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking FilterSecurityInterceptor (14/14)
2024-11-14 15:13:35,946 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/login'] - [permitAll] (1/34)
2024-11-14 15:13:35,946 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/captchaImage'] - [permitAll] (2/34)
2024-11-14 15:13:35,946 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/common/**'] - [permitAll] (3/34)
2024-11-14 15:13:35,947 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/aliyun/check/videoCallback'] - [permitAll] (4/34)
2024-11-14 15:13:35,947 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/vehicleLogin/getTokenByOpenId'] - [permitAll] (5/34)
2024-11-14 15:13:35,947 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/vehicleLogin/getTokenByAccount'] - [permitAll] (6/34)
2024-11-14 15:13:35,947 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/vehicleLogin/getTokenByUserId'] - [permitAll] (7/34)
2024-11-14 15:13:35,948 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/vehicleLogin/v2/**'] - [permitAll] (8/34)
2024-11-14 15:13:35,948 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/material_push/ota/**'] - [permitAll] (9/34)
2024-11-14 15:13:35,948 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/material_push/vehicle/**'] - [permitAll] (10/34)
2024-11-14 15:13:35,948 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/tripartite/noAuth/**'] - [permitAll] (11/34)
2024-11-14 15:13:35,948 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/zeekrCode/**'] - [permitAll] (12/34)
2024-11-14 15:13:35,948 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/zopLogin'] - [permitAll] (13/34)
2024-11-14 15:13:35,949 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/light/unityApp/**'] - [permitAll] (14/34)
2024-11-14 15:13:35,949 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - [getAttributes,89] - Did not match request to Ant [pattern='/zeekrWebsiteLogin'] - [permitAll] (15/34)
2024-11-14 15:13:35,949 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.i.FilterSecurityInterceptor - [authenticateIfRequired,311] - Did not re-authenticate AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=null], Granted Authorities=[ROLE_ANONYMOUS]] before authorizing
2024-11-14 15:13:35,950 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.i.FilterSecurityInterceptor - [beforeInvocation,205] - Authorizing filter invocation [GET /api/websocket/1?sid=1] with attributes [permitAll]
2024-11-14 15:13:35,963 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.a.i.FilterSecurityInterceptor - [beforeInvocation,210] - Authorized filter invocation [GET /api/websocket/1?sid=1] with attributes [permitAll]
2024-11-14 15:13:35,963 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.i.FilterSecurityInterceptor - [beforeInvocation,230] - Did not switch RunAs authentication since RunAsManager returned null
2024-11-14 15:13:35,963 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.FilterChainProxy - [doFilter,333] - Secured GET /api/websocket/1?sid=1
2024-11-14 15:13:35,970 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [traceDebug,116] - GET "/light_show/api/websocket/1?sid=1", parameters={masked}, headers={masked} in DispatcherServlet 'dispatcherServlet'
2024-11-14 15:13:35,991 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.h.SimpleUrlHandlerMapping - [getHandler,519] - Mapped to HandlerExecutionChain with [ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]] and 5 interceptors
2024-11-14 15:13:35,998 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.w.s.r.ResourceHttpRequestHandler - [handleRequest,560] - Resource not found
2024-11-14 15:13:35,999 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.h.w.HstsHeaderWriter - [writeHeaders,152] - Not injecting HSTS header since it did not match request to [Is Secure]
2024-11-14 15:13:35,999 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [processDispatchResult,1157] - No view rendering, null ModelAndView returned.
2024-11-14 15:13:36,000 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.w.s.DispatcherServlet - [logResult,1131] - Completed 404 NOT_FOUND, headers={masked}
2024-11-14 15:13:36,004 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'springApplicationAdminRegistrar'
2024-11-14 15:13:36,004 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'refreshEventListener'
2024-11-14 15:13:36,005 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'delegatingApplicationListener'
2024-11-14 15:13:36,005 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'liveReloadServerEventListener'
2024-11-14 15:13:36,010 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.c.SecurityContextPersistenceFilter - [doFilter,120] - Cleared SecurityContextHolder to complete request
2024-11-14 15:13:36,010 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.w.s.f.OrderedRequestContextFilter - [doFilterInternal,105] - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4869c438
2024-11-14 15:13:36,013 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.w.s.f.OrderedRequestContextFilter - [initContextHolders,115] - Bound request context to thread: org.apache.catalina.core.ApplicationHttpRequest@dbc441b
2024-11-14 15:13:36,013 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [getFilters,233] - Trying to match request against DefaultSecurityFilterChain [RequestMatcher=any request, Filters=[org.springframework.security.web.session.DisableEncodeUrlFilter@7e0d15b3, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@1637d945, org.springframework.security.web.context.SecurityContextPersistenceFilter@200a935e, org.springframework.security.web.header.HeaderWriterFilter@6b1488ab, org.springframework.web.filter.CorsFilter@1b3d9cf9, org.springframework.security.web.authentication.logout.LogoutFilter@1349e908, org.springframework.web.filter.CorsFilter@1b3d9cf9, com.light.framework.security.filter.JwtAuthenticationTokenFilter@1460bdbd, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@2cd8193, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3f918450, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6d594fcd, org.springframework.security.web.session.SessionManagementFilter@4974ecb3, org.springframework.security.web.access.ExceptionTranslationFilter@74ba9852, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@65dd5073]] (1/1)
2024-11-14 15:13:36,013 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.FilterChainProxy - [doFilterInternal,218] - Securing GET /error?sid=1
2024-11-14 15:13:36,013 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking DisableEncodeUrlFilter (1/14)
2024-11-14 15:13:36,013 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking WebAsyncManagerIntegrationFilter (2/14)
2024-11-14 15:13:36,013 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking SecurityContextPersistenceFilter (3/14)
2024-11-14 15:13:36,013 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.c.SecurityContextPersistenceFilter - [doFilter,104] - Set SecurityContextHolder to empty SecurityContext
2024-11-14 15:13:36,014 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking HeaderWriterFilter (4/14)
2024-11-14 15:13:36,014 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking CorsFilter (5/14)
2024-11-14 15:13:36,014 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking LogoutFilter (6/14)
2024-11-14 15:13:36,014 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.l.LogoutFilter - [requiresLogout,117] - Did not match request to Or [Ant [pattern='/logout', GET], Ant [pattern='/logout', POST], Ant [pattern='/logout', PUT], Ant [pattern='/logout', DELETE]]
2024-11-14 15:13:36,014 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking CorsFilter (7/14)
2024-11-14 15:13:36,014 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking JwtAuthenticationTokenFilter (8/14)
2024-11-14 15:13:36,015 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking RequestCacheAwareFilter (9/14)
2024-11-14 15:13:36,015 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking SecurityContextHolderAwareRequestFilter (10/14)
2024-11-14 15:13:36,015 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking AnonymousAuthenticationFilter (11/14)
2024-11-14 15:13:36,015 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.a.AnonymousAuthenticationFilter - [doFilter,96] - Set SecurityContextHolder to AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=null], Granted Authorities=[ROLE_ANONYMOUS]]
2024-11-14 15:13:36,015 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking SessionManagementFilter (12/14)
2024-11-14 15:13:36,015 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking ExceptionTranslationFilter (13/14)
2024-11-14 15:13:36,015 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.s.w.FilterChainProxy - [doFilter,343] - Invoking FilterSecurityInterceptor (14/14)
2024-11-14 15:13:36,016 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.FilterChainProxy - [doFilter,333] - Secured GET /error?sid=1
2024-11-14 15:13:36,016 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [traceDebug,116] - "ERROR" dispatch for GET "/light_show/error?sid=1", parameters={masked}, headers={masked} in DispatcherServlet 'dispatcherServlet'
2024-11-14 15:13:36,023 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.m.m.a.RequestMappingHandlerMapping - [lookupHandlerMethod,417] - 2 matching mappings: [{ [/error]}, { [/error], produces [text/html]}]
2024-11-14 15:13:36,024 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.f.s.DefaultListableBeanFactory - [doGetBean,264] - Returning cached instance of singleton bean 'basicErrorController'
2024-11-14 15:13:36,024 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.m.m.a.RequestMappingHandlerMapping - [getHandler,519] - Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2024-11-14 15:13:36,039 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.m.HandlerMethod - [invokeForRequest,148] - Arguments: [SecurityContextHolderAwareRequestWrapper[ FirewalledRequest[ org.apache.catalina.core.ApplicationHttpRequest@dbc441b]]]
2024-11-14 15:13:36,062 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.HttpEntityMethodProcessor - [writeWithMessageConverters,268] - Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
2024-11-14 15:13:36,064 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.m.m.a.HttpEntityMethodProcessor - [traceDebug,116] - Writing [{timestamp=Thu Nov 14 15:13:36 CST 2024, status=404, error=Not Found, message=No message available, path=/light_show/api/websocket/1}]
2024-11-14 15:13:36,082 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.w.s.DispatcherServlet - [processDispatchResult,1157] - No view rendering, null ModelAndView returned.
2024-11-14 15:13:36,082 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.w.s.DispatcherServlet - [logResult,1127] - Exiting from "ERROR" dispatch, status 404, headers={masked}
2024-11-14 15:13:36,082 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] DEBUG o.s.s.w.c.SecurityContextPersistenceFilter - [doFilter,120] - Cleared SecurityContextHolder to complete request
2024-11-14 15:13:36,083 {yyyy-MM-dd} {HH:mm:ss.SSS} [http-nio-8080-exec-1] TRACE o.s.b.w.s.f.OrderedRequestContextFilter - [doFilterInternal,105] - Cleared thread-bound request context: org.apache.catalina.core.ApplicationHttpRequest@dbc441b
2024-11-14 15:13:40,843 {yyyy-MM-dd} {HH:mm:ss.SSS} [QuartzScheduler_LightShowScheduler-suixins-MacBook-Pro.local1731568391946_MisfireHandler] DEBUG o.s.s.q.LocalDataSourceJobStore - [manage,4010] - MisfireHandler: scanning for misfires...
2024-11-14 15:13:40,915 {yyyy-MM-dd} {HH:mm:ss.SSS} [QuartzScheduler_LightShowScheduler-suixins-MacBook-Pro.local1731568391946_MisfireHandler] DEBUG o.s.s.q.LocalDataSourceJobStore - [doRecoverMisfires,3259] - Found 0 triggers that missed their scheduled fire-time.
摘取关键代码就是404,找不到路径
解决方法如下
1、在WebSocketServer类中更改如下
@ServerEndpoint(value = "/api/websocket/{sid}",configurator = WebSocketConfig.class,encoders = WebSocketCustomEncoding.class)
新增了configurator = WebSocketConfig.class
2、然后在WebSocketConfig中新增
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
源码如下:
WebSocketConfig.java
@Configuration
@EnableWebSocket
public class WebSocketConfig extends ServerEndpointConfig.Configurator implements WebSocketConfigurer {
/**
* 注入拦截器
*/
@Resource
private WebSocketInterceptor webSocketInterceptor;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
webSocketHandlerRegistry
//添加myHandler消息处理对象,和websocket访问地址
.addHandler(myHandler(), "/aip/websocket")
//设置允许跨域访问
.setAllowedOrigins("*")
//添加拦截器可实现用户链接前进行权限校验等操作
.addInterceptors(webSocketInterceptor);
}
@Bean
public WebSocketHandler myHandler() {
return new MyWebSocketHandler();
}
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
WebSocketInterceptor.java
@RefreshScope
@Component
public class WebSocketInterceptor implements HandshakeInterceptor {
/**
* 日志
*/
private static final Logger log = LoggerFactory.getLogger(WebSocketInterceptor.class);
@Resource
private final RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
@Value("${token.expireTime}")
private int expireTime;
/**
* 握手之前
*
* @param request request
* @param response response
* @param wsHandler handler
* @param attributes 属性
* @return 是否握手成功:true-成功,false-失败
*/
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) {
ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
//获取参数
String uuid = serverHttpRequest.getServletRequest().getParameter(SocketConstants.SOCKET_KEY);
Collection<String> keys = redisCache.keys(Constants.LOGIN_SOCKET_KEY + "*");
if( keys.contains(Constants.LOGIN_SOCKET_KEY+uuid)){
attributes.put(SocketConstants.SOCKET_KEY, uuid);
log.info(MessageTemplate.socketExist,uuid);
return true;
}else {
log.info(MessageTemplate.socketUnExist,uuid);
return false;
}
}
/**
* 握手后
*
* @param request request
* @param response response
* @param wsHandler wsHandler
* @param exception exception
*/
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Exception exception) {
ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
//获取参数
String uuid = serverHttpRequest.getServletRequest().getParameter(SocketConstants.SOCKET_KEY);
SocketConnect socketConnect = redisCache.getCacheObject(Constants.LOGIN_SOCKET_KEY + uuid);
socketConnect.setLastConnectTime(new Date());
socketConnect.setState(SocketConstants.CONNECT);
redisCache.setCacheObject(Constants.LOGIN_SOCKET_KEY+uuid, socketConnect,expireTime, TimeUnit.MINUTES);
log.info(MessageTemplate.socketConnectSuccess,uuid);
}
}
MyWebSocketHandler.java
@RefreshScope
public class MyWebSocketHandler extends TextWebSocketHandler {
/**
* 日志
*/
private static final Logger log = LoggerFactory.getLogger(MyWebSocketHandler.class);
/**
* 静态变量,用来记录当前在线连接数
*/
private static final AtomicInteger onlineNum = new AtomicInteger();
/**
* 存放每个客户端连接对象
*/
private static final ConcurrentHashMap<String, WebSocketSession> sessionPools = new ConcurrentHashMap<>();
@Resource
private final RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
@Value("${token.expireTime}")
private int expireTime;
/**
* 在线人数加一
*/
public static void addOnlineCount() { onlineNum.incrementAndGet(); }
/**
* 在线人数减一
*/
public static void subOnlineCount() {
onlineNum.decrementAndGet();
}
/**
* 接受客户端消息
*
* @param session session
* @param message message
*/
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
System.out.println(message);
log.info(MessageTemplate.socketReceiveMessage, session.getAttributes().get(SocketConstants.SOCKET_KEY), message.getPayload());
}
/**
* 建立连接后发送消息给客户端
*
* @param session session
* @throws Exception e
*/
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
String uuid = session.getAttributes().get(SocketConstants.SOCKET_KEY).toString();
WebSocketSession put = sessionPools.put(uuid, session);
if (put == null) {
addOnlineCount();
}
String format = StringUtils.format(MessageTemplate.socketConnectSuccess,uuid);
TextMessage ok = new TextMessage(format);
session.sendMessage(ok);
log.info(MessageTemplate.socketSendMessage,uuid,format);
}
/**
* 连接关闭后
*
* @param session session
* @param status status
* @throws Exception e
*/
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
String uuid = session.getAttributes().get(SocketConstants.SOCKET_KEY).toString();
SocketConnect socketConnect = redisCache.getCacheObject(Constants.LOGIN_SOCKET_KEY + uuid);
socketConnect.setLastOffTime(new Date());
socketConnect.setState(SocketConstants.OFF);
redisCache.setCacheObject(Constants.LOGIN_SOCKET_KEY+uuid, socketConnect,expireTime, TimeUnit.MINUTES);
sessionPools.remove(uuid);
subOnlineCount();
log.info(MessageTemplate.socketConnectClose,uuid);
}
/**
* 发送广播消息
*
* @param message 消息内容
*/
public static void sendTopic(String message) {
if (sessionPools.isEmpty()) {
return;
}
for (Map.Entry<String, WebSocketSession> entry : sessionPools.entrySet()) {
try {
entry.getValue().sendMessage(new TextMessage(message));
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 点对点发送消息
*
* @param uid 用户
* @param message 消息
*/
public static void sendToUser(String uid, String message) {
WebSocketSession socketSession = sessionPools.get(uid);
if (socketSession == null) {
return;
}
try {
socketSession.sendMessage(new TextMessage(message));
} catch (IOException e) {
log.error("send to user:{}, error! data:{}", uid, message);
}
}
}
WebSocketServer.java
@ServerEndpoint(value = "/api/websocket/{sid}",configurator = WebSocketConfig.class,encoders = WebSocketCustomEncoding.class)
@Component
public class WebSocketServer {
@Resource
private final RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
static Log log=LogFactory.get(WebSocketServer.class);
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 0;
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
private static final CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
//接收sid
private String sid="";
private static final Map<String,Object> map = new HashMap<>();
/**
* 连接建立成功调用的方法*/
@OnOpen
public void onOpen(Session session,@PathParam("sid") String sid) throws IOException {
String cacheObject = redisCache.getCacheObject(Constants.LOGIN_SOCKET_KEY + sid);
if(StringUtils.isNotNull(cacheObject)){
this.session = session;
webSocketSet.add(this); //加入set中
addOnlineCount(); //在线数加1
log.info("有新窗口开始监听:"+sid+",当前在线人数为" + getOnlineCount());
this.sid=sid;
try {
map.clear();
map.put("type",0);
map.put("data","连接成功");
sendMessage(map);
} catch (Exception e) {
log.error("websocket IO异常");
}
}
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose() {
QRCodeBody qrCodeBody = redisCache.getCacheObject(QRCodeConstants.QR_STATUS_KEY + this.sid);
if(StringUtils.isNotNull(qrCodeBody)){
webSocketSet.remove(this); //从set中删除
subOnlineCount(); //在线数减1
log.info("有一连接关闭!当前在线人数为" + getOnlineCount());
redisCache.deleteObject(QRCodeConstants.QR_STATUS_KEY + this.sid);
}
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息*/
@OnMessage
public void onMessage(String message, Session session) {
log.info("收到信息:"+message);
sendInfo("123",session.getId());
}
/**
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
log.error("发生错误");
error.printStackTrace();
}
/**
* 实现服务器主动推送
*/
public void sendMessage(Object message) throws IOException, EncodeException {
this.session.getBasicRemote().sendObject(message);
}
/**
* 群发自定义消息
* */
public static void sendInfo(Object message,@PathParam("sid") String sid){
log.info("推送消息到窗口"+sid+",推送内容:"+message);
for (WebSocketServer item : webSocketSet) {
try {
item.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketServer.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketServer.onlineCount--;
}
}