Explorar el Código

websocket通过token来设置用户信息

黄远 hace 5 años
padre
commit
db670980e1

+ 4 - 4
lift-batch-service/src/main/resources/application.yml

@@ -1,15 +1,15 @@
 server:
   port: 20231
-#  tomcat:
-#    basedir: /Users/huangyuan/application/tomcat/data/tomcat_temp
   tomcat:
-    basedir: /home/ying/server/application/tomcat/data/zuul_tomcat_temp
+    basedir: /Users/huangyuan/application/tomcat/data/tomcat_temp
+#  tomcat:
+#    basedir: /home/ying/server/application/tomcat/data/zuul_tomcat_temp
 
 spring:
   application:
     name: lift-batch-service
   profiles:
-    active: prod
+    active: test
 
 # mybatis-plus配置
 mybatis-plus:

+ 5 - 0
lift-common/src/main/java/cn.com.ty.lift.common/constants/ApiConstants.java

@@ -66,6 +66,11 @@ public class ApiConstants {
      */
     public static final String CURRENT_USER_TYPE = "currentUserType";
 
+    /**
+     * 用户token
+     */
+    public static final String AUTHORIZATION_TOKEN = "Authorization";
+
     /**
      * 访问类型 pc端访问
      */

+ 5 - 1
lift-push/src/main/java/cn/com/ty/lift/push/websocket/config/WebSocketConfig.java

@@ -4,6 +4,7 @@ import cn.com.ty.lift.push.message.service.TimeMessageService;
 import cn.com.ty.lift.push.websocket.handler.TimeyMessageHandler;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.TaskScheduler;
 import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler;
 import org.springframework.web.socket.config.annotation.EnableWebSocket;
@@ -26,6 +27,9 @@ public class WebSocketConfig implements WebSocketConfigurer {
     @Resource
     private TimeMessageService  timeMessageService;
 
+    @Resource
+    private RedisTemplate redisTemplate;
+
     @Bean
     public TaskScheduler taskScheduler() {
         return new ConcurrentTaskScheduler(Executors.newSingleThreadScheduledExecutor());
@@ -33,7 +37,7 @@ public class WebSocketConfig implements WebSocketConfigurer {
 
     @Override
     public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
-        registry.addHandler(new TimeyMessageHandler(timeMessageService), "/myMessageHandler")
+        registry.addHandler(new TimeyMessageHandler(timeMessageService, redisTemplate), "/myMessageHandler")
                 .setAllowedOrigins("*")
                 .addInterceptors(new WebSocketInterceptor());
     }

+ 9 - 1
lift-push/src/main/java/cn/com/ty/lift/push/websocket/config/WebSocketInterceptor.java

@@ -1,11 +1,14 @@
 package cn.com.ty.lift.push.websocket.config;
 
+import cn.com.ty.lift.common.constants.ApiConstants;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;
 import org.springframework.http.server.ServletServerHttpRequest;
 import org.springframework.web.socket.WebSocketHandler;
 import org.springframework.web.socket.server.HandshakeInterceptor;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import java.util.Map;
 
 public class WebSocketInterceptor implements HandshakeInterceptor {
@@ -18,7 +21,12 @@ public class WebSocketInterceptor implements HandshakeInterceptor {
                                    WebSocketHandler wsHandler, Map<String, Object> map) {
 
         if (request instanceof ServletServerHttpRequest) {
-            System.out.println("进入成功");
+            ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
+            HttpServletRequest httpServletRequest = serverHttpRequest.getServletRequest();
+            //获取token
+            String authorizationToken = httpServletRequest.getParameter(ApiConstants.AUTHORIZATION_TOKEN);
+            HttpSession session = httpServletRequest.getSession();
+            session.setAttribute(ApiConstants.AUTHORIZATION_TOKEN, authorizationToken);
         }
         return true;
     }

+ 14 - 8
lift-push/src/main/java/cn/com/ty/lift/push/websocket/handler/TimeyMessageHandler.java

@@ -7,6 +7,7 @@ import cn.com.ty.lift.push.message.service.TimeMessageService;
 import cn.com.ty.lift.push.websocket.dao.model.RealTimeMessage;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.socket.*;
 
 import java.util.ArrayList;
@@ -18,11 +19,14 @@ public class TimeyMessageHandler implements WebSocketHandler {
 
     private TimeMessageService timeMessageService;
 
+    private RedisTemplate redisTemplate;
+
     public TimeyMessageHandler() {
     }
 
-    public TimeyMessageHandler(TimeMessageService TimeMessageService) {
+    public TimeyMessageHandler(TimeMessageService TimeMessageService, RedisTemplate redisTemplate) {
         this.timeMessageService = TimeMessageService;
+        this.redisTemplate = redisTemplate;
     }
 
     //在线用户列表
@@ -164,14 +168,16 @@ public class TimeyMessageHandler implements WebSocketHandler {
      * @date 2018年9月18日
      */
     private Long getCurrentUser(WebSocketSession session) {
-        Long userId;
-        try {
-            userId = (Long) session.getAttributes().get(ApiConstants.CURRENT_USER_ID);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
+        String authToken = (String) session.getAttributes().get(ApiConstants.AUTHORIZATION_TOKEN);
+        Object mobileUserInfo = redisTemplate.opsForValue().get(authToken);
+        if(mobileUserInfo != null) {
+            Object userInfo = redisTemplate.opsForValue().get(mobileUserInfo);
+            if(userInfo != null) {
+                Map<String, Object> currentUserInfoMap = JSONUtil.parseObj(userInfo);
+                return (Long) currentUserInfoMap.get(ApiConstants.CURRENT_USER_ID);
+            }
         }
-        return userId;
+        return null;
     }
 
 }