zcc 2 år sedan
förälder
incheckning
1c6c829450

+ 1 - 1
mec-websocket/pom.xml

@@ -70,7 +70,7 @@
 		<dependency>
 			<groupId>com.corundumstudio.socketio</groupId>
 			<artifactId>netty-socketio</artifactId>
-			<version>1.7.7</version>
+			<version>1.7.19</version>
 		</dependency>
 	</dependencies>
 	<build>

+ 4 - 4
mec-websocket/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -1,5 +1,7 @@
 package com.ym.mec.web.config;
 
+import com.ym.mec.common.security.BaseAccessDeniedHandler;
+import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@@ -8,9 +10,6 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.E
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
 import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
 
-import com.ym.mec.common.security.BaseAccessDeniedHandler;
-import com.ym.mec.common.security.BaseAuthenticationEntryPoint;
-
 @Configuration
 @EnableResourceServer
 @EnableGlobalMethodSecurity(prePostEnabled = true)
@@ -33,7 +32,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .authorizeRequests()
                 .antMatchers("/task/**")
                 .hasIpAddress("0.0.0.0/0")
-                .antMatchers("/v2/api-docs").permitAll().anyRequest().authenticated().and().httpBasic();
+                .antMatchers("/v2/api-docs","/socket.io").permitAll().anyRequest()
+                .authenticated().and().httpBasic();
     }
 
     @Override

+ 1 - 0
mec-websocket/src/main/java/com/ym/mec/web/config/SocketIoConfig.java

@@ -24,6 +24,7 @@ public class SocketIoConfig {
         config.setPingInterval(5000);
         config.setPingTimeout(3000);
         config.setWorkerThreads(100);
+        config.setRandomSession(true);
 
         SocketConfig socketConfig = new SocketConfig();
         socketConfig.setReuseAddress(true);

+ 5 - 6
mec-websocket/src/main/java/com/ym/mec/web/config/WebMvcConfig.java

@@ -1,8 +1,8 @@
 package com.ym.mec.web.config;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import com.ym.mec.common.config.EnumConverterFactory;
+import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
+import com.ym.mec.web.interceptor.OperationLogInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
@@ -12,9 +12,8 @@ import org.springframework.http.MediaType;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
-import com.ym.mec.common.config.EnumConverterFactory;
-import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
-import com.ym.mec.web.interceptor.OperationLogInterceptor;
+import java.util.ArrayList;
+import java.util.List;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {

+ 5 - 4
mec-websocket/src/main/java/com/ym/mec/web/handler/Chat1.java → mec-websocket/src/main/java/com/ym/mec/web/handler/WhiteboardHandler.java

@@ -15,8 +15,8 @@ import org.springframework.stereotype.Component;
 
 
 @Component
-@OnNamespace("/chat1")
-public class Chat1 {
+@OnNamespace("/whiteboard")
+public class WhiteboardHandler {
     @NamespaceReference
     private SocketIONamespace namespace;
 
@@ -28,8 +28,8 @@ public class Chat1 {
      */
     @OnConnect
     public void onConnect(SocketIOClient client) {
-        ;
 
+        client.joinRoom("whiteboard");
     }
 
     /**
@@ -37,7 +37,8 @@ public class Chat1 {
      */
     @OnDisconnect
     public void onDisconnect(SocketIOClient client) {
-
+        client.leaveRoom("whiteboard");
+        client.disconnect();
     }
 
     @OnEvent(value = "message")

+ 8 - 3
mec-websocket/src/main/java/com/ym/mec/web/support/socket/NamespaceFactoryBean.java

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
 @Component
 public class NamespaceFactoryBean implements FactoryBean<SocketIONamespace> {
 
-    private Class originalBeanClass;
+    private Class<?> originalBeanClass;
     private final SocketIOServer server;
 
     @Autowired
@@ -22,9 +22,14 @@ public class NamespaceFactoryBean implements FactoryBean<SocketIONamespace> {
 
     @Override
     public SocketIONamespace getObject() {
+
         OnNamespace onNamespace = AnnotationUtils.findAnnotation(originalBeanClass, OnNamespace.class);
+        if (onNamespace == null || StringUtil.isBlank(onNamespace.value())) {
+            return server.getNamespace("");
+        }
+
         String namespace = onNamespace.value();
-        if (!namespace.startsWith("/") && StringUtil.isNotBlank(namespace)) {
+        if (!namespace.startsWith("/")) {
             namespace = "/" + namespace;
         }
         return server.addNamespace(namespace);
@@ -35,7 +40,7 @@ public class NamespaceFactoryBean implements FactoryBean<SocketIONamespace> {
         return SocketIONamespace.class;
     }
 
-    public void setOriginalBeanClass(Class originalBeanClass) {
+    public void setOriginalBeanClass(Class<?> originalBeanClass) {
         this.originalBeanClass = originalBeanClass;
     }
 }

+ 21 - 16
mec-websocket/src/main/java/com/ym/mec/web/support/socket/SocketEventScanner.java

@@ -30,7 +30,7 @@ public class SocketEventScanner implements BeanPostProcessor {
     private final List<Class<? extends Annotation>> annotations =
             Arrays.asList(OnConnect.class, OnDisconnect.class, OnEvent.class);
 
-    private Class originalBeanClass;
+    private Class<?> originalBeanClass;
 
     @Override
     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
@@ -40,20 +40,10 @@ public class SocketEventScanner implements BeanPostProcessor {
             factoryBean.setOriginalBeanClass(originalBeanClass);
             SocketIONamespace socketIONamespace = factoryBean.getObject();
             socketIONamespace.addListeners(bean, originalBeanClass);
-            LOGGER.info("{}  bean 手动 listeners added", beanName);
+            LOGGER.info("{} bean listeners added", beanName);
             //注入属性
             Field[] declaredFields = originalBeanClass.getDeclaredFields();
-            for (Field declaredField : declaredFields) {
-                if (declaredField.isAnnotationPresent(NamespaceReference.class)) {
-                    try {
-                        declaredField.setAccessible(true);
-                        declaredField.set(bean, socketIONamespace);
-                    } catch (IllegalAccessException e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-
-            }
+            setNamespace(bean, socketIONamespace, declaredFields);
             originalBeanClass = null;
         }
 
@@ -64,9 +54,9 @@ public class SocketEventScanner implements BeanPostProcessor {
     @Override
     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
 
-        final AtomicBoolean add = new AtomicBoolean();
+        final AtomicBoolean flag = new AtomicBoolean();
         ReflectionUtils.doWithMethods(bean.getClass(),
-                method -> add.set(true),
+                method -> flag.set(true),
                 method -> {
                     //匹配符合的方法
                     for (Class<? extends Annotation> annotationClass : annotations) {
@@ -76,9 +66,24 @@ public class SocketEventScanner implements BeanPostProcessor {
                     }
                     return false;
                 });
-        if (add.get()) {
+        //找到赋值
+        if (flag.get()) {
             originalBeanClass = bean.getClass();
         }
         return bean;
     }
+
+    private void setNamespace(Object bean, SocketIONamespace socketIONamespace, Field[] declaredFields) {
+        for (Field declaredField : declaredFields) {
+            if (declaredField.isAnnotationPresent(NamespaceReference.class)) {
+                try {
+                    declaredField.setAccessible(true);
+                    declaredField.set(bean, socketIONamespace);
+                } catch (IllegalAccessException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+
+        }
+    }
 }