From 04e11246ced04c3e00ff4fc6edb165f2c96a554a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9E=97=E6=B3=BD=E9=94=8B?= <282245889@qq.com>
Date: Fri, 17 Jul 2020 10:58:15 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=82=E6=95=B0=E5=85=A5?=
=?UTF-8?q?=E5=8F=82=E7=9A=84=E6=B3=A8=E8=A7=A3=E7=9A=84=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 17 ++++++++++++++---
vue-example/netty-websocket-vue-back/pom.xml | 2 +-
.../demo/vue/controller/UserController.java | 12 ++++++++++++
.../src/components/HelloWorld.vue | 5 +++++
websocket-spring-boot-core/pom.xml | 10 ++--------
.../annotation/WebSocketRequestParam.java | 18 ++++++++++++++++++
.../websocket/beans/NettyMethodDefinition.java | 13 +++++++++++++
.../WebSocketControllerBeanFactory.java | 16 ++++++++++++++++
.../server/channel/WebSocketHandler.java | 7 ++++++-
...ebsocketSpringBootCoreApplicationTests.java | 3 ++-
websocket-spring-boot-starter/pom.xml | 12 +++---------
...ocketSpringBootStarterApplicationTests.java | 3 ++-
.../demo/controller/DemoController.java | 11 ++++++++++-
.../demo/security/WebsocketSecurityImpl.java | 2 +-
14 files changed, 105 insertions(+), 26 deletions(-)
create mode 100644 websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/annotation/WebSocketRequestParam.java
diff --git a/README.md b/README.md
index c748ded..7305846 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ websocket-spring-boot-starter [![License](http://img.shields.io/:license-apache-
### 要求
- jdk版本为1.8或1.8+
-- spring-boot版本为2.3.1.RELEASE
+- spring-boot版本为2.0.1.RELEASE+
- netty版本为4.1.42.Final
### example例子
@@ -19,7 +19,7 @@ websocket-spring-boot-starter [![License](http://img.shields.io/:license-apache-
com.github.lazyboyl
websocket-spring-boot-starter
- 0.0.1-SNAPSHOT
+ 1.0.1.RELEASE
```
@@ -47,6 +47,12 @@ public class VueDemoApplication {
@WebSocketController
@WebSocketRequestMapping("/user/")
public class UserController {
+
+ /**
+ * 这个userService就是我们平时在spring里面写的service
+ */
+ @Autowired
+ private UserService userService;
/**
* 功能描述: 模拟字段请求的方式来实现根据用户ID来获取用户数据
@@ -225,4 +231,9 @@ websocket:
thread:
boss: 12
work: 12
-```
\ No newline at end of file
+```
+---
+### 版本更新
+#### 1.0.1.RELEASE
+- `@WebSocketController`注解的类支持构造方法的方式注入的支持。
+- 新增`@WebSocketRequestParam`支持入参的自定义。
diff --git a/vue-example/netty-websocket-vue-back/pom.xml b/vue-example/netty-websocket-vue-back/pom.xml
index c3cc13b..0c0214a 100644
--- a/vue-example/netty-websocket-vue-back/pom.xml
+++ b/vue-example/netty-websocket-vue-back/pom.xml
@@ -23,7 +23,7 @@
com.github.lazyboyl
websocket-spring-boot-starter
- 0.0.3-SNAPSHOT
+ 1.0.1.RELEASE
diff --git a/vue-example/netty-websocket-vue-back/src/main/java/com/vue/demo/vue/controller/UserController.java b/vue-example/netty-websocket-vue-back/src/main/java/com/vue/demo/vue/controller/UserController.java
index 06940be..5d1221b 100644
--- a/vue-example/netty-websocket-vue-back/src/main/java/com/vue/demo/vue/controller/UserController.java
+++ b/vue-example/netty-websocket-vue-back/src/main/java/com/vue/demo/vue/controller/UserController.java
@@ -2,6 +2,7 @@
import com.github.lazyboyl.websocket.annotation.WebSocketController;
import com.github.lazyboyl.websocket.annotation.WebSocketRequestMapping;
+import com.github.lazyboyl.websocket.annotation.WebSocketRequestParam;
import com.vue.demo.vue.entity.OrgVo;
import com.vue.demo.vue.entity.UserVo;
import com.vue.demo.vue.service.UserService;
@@ -22,6 +23,17 @@ public class UserController {
@Autowired
private UserService userService;
+ /**
+ * 功能描述: 模拟字段请求且使用别名的方式来实现根据用户ID来获取用户数据
+ *
+ * @param userId 用户的流水ID
+ * @return
+ */
+ @WebSocketRequestMapping("getUserVoByUserIdRename")
+ public UserVo getUserVoByUserIdRename(@WebSocketRequestParam(name = "uId") String userId) {
+ return userService.getUserVoByUserId(userId);
+ }
+
/**
* 功能描述: 模拟实体请求的方式来实现根据用户ID来获取用户数据
*
diff --git a/vue-example/netty-websocket-vue-front/src/components/HelloWorld.vue b/vue-example/netty-websocket-vue-front/src/components/HelloWorld.vue
index f6b078c..ee98272 100644
--- a/vue-example/netty-websocket-vue-front/src/components/HelloWorld.vue
+++ b/vue-example/netty-websocket-vue-front/src/components/HelloWorld.vue
@@ -6,6 +6,7 @@
+
@@ -23,6 +24,10 @@ export default {
this.initWebSocket()
},
methods: {
+ getUserVoByUserIdRename () {
+ let actions = {'url': '/user/getUserVoByUserIdRename/', 'params': {'uId': 'abc'}}
+ this.websocketsend(JSON.stringify(actions))
+ },
getOrgVo () {
let actions = {'url': '/org/getOrgVo/', 'params': {'orgId': 'sada11d', 'orgName': '林泽锋'}}
this.websocketsend(JSON.stringify(actions))
diff --git a/websocket-spring-boot-core/pom.xml b/websocket-spring-boot-core/pom.xml
index 8654497..5b7145f 100644
--- a/websocket-spring-boot-core/pom.xml
+++ b/websocket-spring-boot-core/pom.xml
@@ -56,20 +56,14 @@
org.springframework.boot
spring-boot-starter
- 2.3.1.RELEASE
+ 2.0.1.RELEASE
org.springframework.boot
spring-boot-starter-test
- 2.3.1.RELEASE
+ 2.0.1.RELEASE
test
-
-
- org.junit.vintage
- junit-vintage-engine
-
-
diff --git a/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/annotation/WebSocketRequestParam.java b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/annotation/WebSocketRequestParam.java
new file mode 100644
index 0000000..7481d97
--- /dev/null
+++ b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/annotation/WebSocketRequestParam.java
@@ -0,0 +1,18 @@
+package com.github.lazyboyl.websocket.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 类描述:请求参数的别名的在定义的注解
+ *
+ * @author linzef
+ * @since 2020-07-17
+ */
+@Target({ElementType.PARAMETER})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface WebSocketRequestParam {
+
+ String name() default "";
+
+}
diff --git a/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/beans/NettyMethodDefinition.java b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/beans/NettyMethodDefinition.java
index 2ec165b..1c76b82 100644
--- a/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/beans/NettyMethodDefinition.java
+++ b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/beans/NettyMethodDefinition.java
@@ -59,6 +59,19 @@ public class NettyMethodDefinition {
*/
private String beanName;
+ /**
+ * WebSocketRequestParam定义的别名
+ */
+ private String [] requestParamName;
+
+ public String[] getRequestParamName() {
+ return requestParamName;
+ }
+
+ public void setRequestParamName(String[] requestParamName) {
+ this.requestParamName = requestParamName;
+ }
+
public Parameter[] getParameters() {
return parameters;
}
diff --git a/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/factory/WebSocketControllerBeanFactory.java b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/factory/WebSocketControllerBeanFactory.java
index 410154c..61228b8 100644
--- a/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/factory/WebSocketControllerBeanFactory.java
+++ b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/factory/WebSocketControllerBeanFactory.java
@@ -1,6 +1,7 @@
package com.github.lazyboyl.websocket.factory;
import com.github.lazyboyl.websocket.annotation.WebSocketRequestMapping;
+import com.github.lazyboyl.websocket.annotation.WebSocketRequestParam;
import com.github.lazyboyl.websocket.beans.NettyBeanDefinition;
import com.github.lazyboyl.websocket.beans.NettyMethodDefinition;
import org.springframework.core.env.Environment;
@@ -95,6 +96,21 @@ protected void registerNettyMethodDefinition(Class c, NettyBeanDefinition nettyB
nettyMethodDefinition.setMethodName(m.getName());
nettyMethodDefinition.setBeanName(c.getName());
nettyMethodDefinition.setParameters(m.getParameters());
+ Annotation[][] parameterAnnotations = m.getParameterAnnotations();
+ String[] requestParamName = new String[parameterAnnotations.length];
+ for (int i = 0; i < parameterAnnotations.length; i++) {
+ if (parameterAnnotations[i].length == 0) {
+ requestParamName[i] = "";
+ } else {
+ for (int j = 0; j < parameterAnnotations[i].length; j++) {
+ if(parameterAnnotations[i][j] instanceof WebSocketRequestParam){
+ WebSocketRequestParam wsrp = (WebSocketRequestParam) parameterAnnotations[i][j];
+ requestParamName[i] = wsrp.name();
+ }
+ }
+ }
+ }
+ nettyMethodDefinition.setRequestParamName(requestParamName);
methodMap.put(c.getName() + "." + m.getName(), nettyMethodDefinition);
WebSocketRequestMapping a = m.getAnnotation(WebSocketRequestMapping.class);
if (a == null) {
diff --git a/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/server/channel/WebSocketHandler.java b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/server/channel/WebSocketHandler.java
index df5aa94..b145384 100644
--- a/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/server/channel/WebSocketHandler.java
+++ b/websocket-spring-boot-core/src/main/java/com/github/lazyboyl/websocket/server/channel/WebSocketHandler.java
@@ -209,6 +209,7 @@ protected void invokeMethod(ChannelHandlerContext ctx, NettyMethodDefinition net
Parameter[] ps = nettyMethodDefinition.getParameters();
Object[] obj = new Object[ps.length];
Class[] parameterTypesClass = nettyMethodDefinition.getParameterTypesClass();
+ String [] requestParamName = nettyMethodDefinition.getRequestParamName();
for (int i = 0; i < ps.length; i++) {
Parameter p = ps[i];
if (isMyClass(parameterTypesClass[i])) {
@@ -219,7 +220,11 @@ protected void invokeMethod(ChannelHandlerContext ctx, NettyMethodDefinition net
} else if ("java.util.".indexOf(parameterTypesClass[i].getName()) != -1) {
SocketUtil.writeAndFlush(ctx.channel(), new SocketResponse(HttpResponseStatus.BAD_REQUEST.code(), "java.util系列暂时只支持map和list,其他类型暂不支持。"));
} else {
- obj[i] = paramMap.get(p.getName());
+ if("".equals(requestParamName[i])){
+ obj[i] = paramMap.get(p.getName());
+ } else {
+ obj[i] = paramMap.get(requestParamName[i]);
+ }
}
} else {
if (parameterTypesClass[i].getName().equals(HttpHeaders.class.getName())) {
diff --git a/websocket-spring-boot-core/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootCoreApplicationTests.java b/websocket-spring-boot-core/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootCoreApplicationTests.java
index 41cdc2e..ba6d638 100644
--- a/websocket-spring-boot-core/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootCoreApplicationTests.java
+++ b/websocket-spring-boot-core/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootCoreApplicationTests.java
@@ -1,6 +1,7 @@
package com.github.lazyboyl.websocket;
-import org.junit.jupiter.api.Test;
+
+import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
diff --git a/websocket-spring-boot-starter/pom.xml b/websocket-spring-boot-starter/pom.xml
index 502ebb0..1f95bfa 100644
--- a/websocket-spring-boot-starter/pom.xml
+++ b/websocket-spring-boot-starter/pom.xml
@@ -42,26 +42,20 @@
com.github.lazyboyl
websocket-spring-boot-core
- 1.0.0.RELEASE
+ 1.0.1.RELEASE
org.springframework.boot
spring-boot-starter
- 2.3.1.RELEASE
+ 2.0.1.RELEASE
org.springframework.boot
spring-boot-starter-test
- 2.3.1.RELEASE
+ 2.0.1.RELEASE
test
-
-
- org.junit.vintage
- junit-vintage-engine
-
-
diff --git a/websocket-spring-boot-starter/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootStarterApplicationTests.java b/websocket-spring-boot-starter/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootStarterApplicationTests.java
index a6309b3..e21a503 100644
--- a/websocket-spring-boot-starter/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootStarterApplicationTests.java
+++ b/websocket-spring-boot-starter/src/test/java/com/github/lazyboyl/websocket/WebsocketSpringBootStarterApplicationTests.java
@@ -1,6 +1,7 @@
package com.github.lazyboyl.websocket;
-import org.junit.jupiter.api.Test;
+
+import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
diff --git a/wesocket-demo/src/main/java/com/wesocket/demo/controller/DemoController.java b/wesocket-demo/src/main/java/com/wesocket/demo/controller/DemoController.java
index e728430..6b06de6 100644
--- a/wesocket-demo/src/main/java/com/wesocket/demo/controller/DemoController.java
+++ b/wesocket-demo/src/main/java/com/wesocket/demo/controller/DemoController.java
@@ -2,6 +2,7 @@
import com.github.lazyboyl.websocket.annotation.WebSocketController;
import com.github.lazyboyl.websocket.annotation.WebSocketRequestMapping;
+import com.github.lazyboyl.websocket.annotation.WebSocketRequestParam;
import com.wesocket.demo.entity.OrgVo;
import com.wesocket.demo.service.OrgService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +19,7 @@ public class DemoController {
private Integer port;
@Autowired
- public DemoController(OrgService orgService,@Value("${websocket.port}") Integer port) {
+ public DemoController(OrgService orgService, @Value("${websocket.port}") Integer port) {
this.orgService = orgService;
this.port = port;
}
@@ -29,4 +30,12 @@ public OrgVo getOrgVo111(String orgId, String orgName) {
return orgService.getOrgByOrgId(orgId);
}
+
+ @WebSocketRequestMapping("getOrgVo2222")
+ public OrgVo getOrgVo2222(@WebSocketRequestParam(name = "oId") String orgId, @WebSocketRequestParam(name = "oName") String orgName) {
+ System.out.println("获取到的请求数据是:" + orgId + "和" + orgName + ",端口是" + port);
+ return orgService.getOrgByOrgId(orgId);
+ }
+
+
}
diff --git a/wesocket-demo/src/main/java/com/wesocket/demo/security/WebsocketSecurityImpl.java b/wesocket-demo/src/main/java/com/wesocket/demo/security/WebsocketSecurityImpl.java
index b95837c..5412293 100644
--- a/wesocket-demo/src/main/java/com/wesocket/demo/security/WebsocketSecurityImpl.java
+++ b/wesocket-demo/src/main/java/com/wesocket/demo/security/WebsocketSecurityImpl.java
@@ -27,7 +27,7 @@ public int level() {
@Override
public Boolean authentication(ChannelHandlerContext ctx, SocketRequest socketRequest) {
- if(socketRequest.getUrl().indexOf("getOrgVo111")!=-1){
+ if(socketRequest.getUrl().indexOf("getOrgVo111")!=-1 || socketRequest.getUrl().indexOf("getOrgVo2222")!=-1){
return true;
}
Boolean isPass = authService.authUrl(socketRequest.getUrl());