@@ -39,6 +45,9 @@ public class PigxAuthenticationSuccessEventHandler extends AbstractAuthenticatio
*/
@Override
public void handle(Authentication authentication) {
- log.info("用户:{} 登录成功", authentication.getPrincipal());
+ Object principal = authentication.getPrincipal();
+ log.info("用户:{} 登录成功", principal);
+ PigxUser pigxUser = (PigxUser) principal;
+ simpMessagingTemplate.convertAndSendToUser(pigxUser.getTenantId().toString(),"/loginToAll",pigxUser.getUsername());
}
}
From 665f1ba5b705e70ae175910660f4fe752408f1cc Mon Sep 17 00:00:00 2001
From: 396264893 <396264893@qq.com>
Date: Wed, 16 Jan 2019 17:41:30 +0800
Subject: [PATCH 2/5] =?UTF-8?q?:sparkles:=20=E6=96=B0=E5=A2=9EwebSocket?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
doc/db/2pigxx.sql | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/db/2pigxx.sql b/doc/db/2pigxx.sql
index 5dbac2092..809a52ecc 100644
--- a/doc/db/2pigxx.sql
+++ b/doc/db/2pigxx.sql
@@ -276,7 +276,7 @@ CREATE TABLE `sys_route_conf` (
-- Records of `sys_route_conf`
-- ----------------------------
BEGIN;
-INSERT INTO `sys_route_conf` VALUES ('1', '工作流管理模块', 'pigx-activiti', '[{\"args\": {\"_genkey_0\": \"/act/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-activiti', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:25', '0'), ('2', '认证中心', 'pigx-auth', '[{\"args\": {\"_genkey_0\": \"/auth/**\"}, \"name\": \"Path\"}]', '[{\"args\": {}, \"name\": \"ValidateCodeGatewayFilter\"}, {\"args\": {}, \"name\": \"PasswordDecoderFilter\"}]', 'lb://pigx-auth', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:29', '0'), ('3', '代码生成模块', 'pigx-codegen', '[{\"args\": {\"_genkey_0\": \"/gen/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-codegen', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:32', '0'), ('4', '定时任务模块', 'pigx-daemon', '[{\"args\": {\"_genkey_0\": \"/daemon/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-daemon', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:34', '0'), ('5', '分布式事务模块', 'pigx-tx-manager', '[{\"args\": {\"_genkey_0\": \"/tx/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-tx-manager', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:36', '0'), ('6', '通用权限模块', 'pigx-upms-biz', '[{\"args\": {\"_genkey_0\": \"/admin/**\"}, \"name\": \"Path\"}]', '[{\"args\": {\"key-resolver\": \"#{@remoteAddrKeyResolver}\", \"redis-rate-limiter.burstCapacity\": \"20\", \"redis-rate-limiter.replenishRate\": \"10\"}, \"name\": \"RequestRateLimiter\"}, {\"args\": {\"name\": \"default\", \"fallbackUri\": \"forward:/fallback\"}, \"name\": \"Hystrix\"}]', 'lb://pigx-upms-biz', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:39', '0');
+INSERT INTO `sys_route_conf` VALUES ('1', '工作流管理模块', 'pigx-activiti', '[{\"args\": {\"_genkey_0\": \"/act/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-activiti', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:25', '0'), ('2', '认证中心', 'pigx-auth', '[{\"args\": {\"_genkey_0\": \"/auth/**\"}, \"name\": \"Path\"}]', '[{\"args\": {}, \"name\": \"ValidateCodeGatewayFilter\"}, {\"args\": {}, \"name\": \"PasswordDecoderFilter\"}]', 'lb://pigx-auth', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:29', '0'), ('3', '代码生成模块', 'pigx-codegen', '[{\"args\": {\"_genkey_0\": \"/gen/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-codegen', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:32', '0'), ('4', '定时任务模块', 'pigx-daemon', '[{\"args\": {\"_genkey_0\": \"/daemon/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-daemon', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:34', '0'), ('5', '分布式事务模块', 'pigx-tx-manager', '[{\"args\": {\"_genkey_0\": \"/tx/**\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-tx-manager', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:36', '0'), ('6', '通用权限模块', 'pigx-upms-biz', '[{\"args\": {\"_genkey_0\": \"/admin/**\"}, \"name\": \"Path\"}]', '[{\"args\": {\"key-resolver\": \"#{@remoteAddrKeyResolver}\", \"redis-rate-limiter.burstCapacity\": \"20\", \"redis-rate-limiter.replenishRate\": \"10\"}, \"name\": \"RequestRateLimiter\"}, {\"args\": {\"name\": \"default\", \"fallbackUri\": \"forward:/fallback\"}, \"name\": \"Hystrix\"}]', 'lb://pigx-upms-biz', '0', '2018-11-28 15:56:10', '2018-11-28 15:56:39', '0'),(7, '认证中心长连接模块1', 'pigx-auth-ws', '[{\"args\": {\"_genkey_0\": \"/auth/ws/info\"}, \"name\": \"Path\"}]', '[]', 'lb://pigx-auth', 0, '2019-01-15 19:37:30', '2019-01-15 19:58:31', '0'),(8, '认证中心长连接模块2', 'pigx-auth-ws', '[{\"args\": {\"_genkey_0\": \"/auth/ws/**\"}, \"name\": \"Path\"}]', '[]', 'lb:ws://pigx-auth', 0, '2019-01-15 19:22:39', '2019-01-15 19:58:28', '0');
COMMIT;
-- ----------------------------
From 653f1e8108652adb5f36ace15a8d24f09b0058c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=86=B7=E5=86=B7?=
+ * WebSocket配置类
+ */
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
- @Override
- public void registerStompEndpoints(StompEndpointRegistry registry) {
- registry.addEndpoint("/ws")
- .setAllowedOrigins("*")
- .withSockJS();
- }
- @Override
- public void configureMessageBroker(MessageBrokerRegistry registry) {
- //registry.enableSimpleBroker("/loginToAll");
- registry.setUserDestinationPrefix("/user/");
- }
+ @Override
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ registry.addEndpoint("/ws")
+ .setAllowedOrigins("*")
+ .withSockJS();
+ }
+
+ @Override
+ public void configureMessageBroker(MessageBrokerRegistry registry) {
+ registry.setUserDestinationPrefix("/user/");
+ }
}
diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java
index c5f9c2c36..dad9ab42a 100644
--- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java
+++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java
@@ -19,8 +19,8 @@ package com.pig4cloud.pigx.auth.handler;
import com.pig4cloud.pigx.common.security.handler.AbstractAuthenticationSuccessEventHandler;
import com.pig4cloud.pigx.common.security.service.PigxUser;
+import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
@@ -31,10 +31,9 @@ import org.springframework.stereotype.Component;
*/
@Slf4j
@Component
+@AllArgsConstructor
public class PigxAuthenticationSuccessEventHandler extends AbstractAuthenticationSuccessEventHandler {
-
- @Autowired
- SimpMessagingTemplate simpMessagingTemplate;
+ private final SimpMessagingTemplate simpMessagingTemplate;
/**
* 处理登录成功方法
@@ -48,6 +47,8 @@ public class PigxAuthenticationSuccessEventHandler extends AbstractAuthenticatio
Object principal = authentication.getPrincipal();
log.info("用户:{} 登录成功", principal);
PigxUser pigxUser = (PigxUser) principal;
- simpMessagingTemplate.convertAndSendToUser(pigxUser.getTenantId().toString(),"/loginToAll",pigxUser.getUsername());
+
+ String user = String.format("%s-%s", pigxUser.getUsername(), pigxUser.getTenantId());
+ simpMessagingTemplate.convertAndSendToUser(user, "/loginRemind", pigxUser.getUsername());
}
}
diff --git a/pigx-config/src/main/resources/config/pigx-activiti-dev.yml b/pigx-config/src/main/resources/config/pigx-activiti-dev.yml
index bc971188c..ca34ffc90 100644
--- a/pigx-config/src/main/resources/config/pigx-activiti-dev.yml
+++ b/pigx-config/src/main/resources/config/pigx-activiti-dev.yml
@@ -13,6 +13,7 @@ security:
- '/task/view/*'
- '/process/resource/**'
- '/modeler.html'
+ - '/ws/**'
spring:
autoconfigure:
exclude: org.activiti.spring.boot.SecurityAutoConfiguration
diff --git a/pigx-visual/pigx-activiti/pom.xml b/pigx-visual/pigx-activiti/pom.xml
index 026a95ca3..4ec905bbd 100644
--- a/pigx-visual/pigx-activiti/pom.xml
+++ b/pigx-visual/pigx-activiti/pom.xml
@@ -65,6 +65,11 @@
+ * WebSocket配置类
+ */
+@Slf4j
+@Configuration
+@AllArgsConstructor
+@EnableWebSocketMessageBroker
+public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
+ private RemoteTokenServices tokenService;
+
+ @Override
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ registry.addEndpoint("/ws")
+ .setAllowedOrigins("*")
+ .withSockJS();
+ }
+
+ @Override
+ public void configureMessageBroker(MessageBrokerRegistry registry) {
+ registry.setUserDestinationPrefix("/task/");
+ }
+
+ @Override
+ public void configureClientInboundChannel(ChannelRegistration registration) {
+ registration.interceptors(new ChannelInterceptor() {
+ @Override
+ public Message> preSend(Message> message, MessageChannel channel) {
+ StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
+ if (StompCommand.CONNECT.equals(accessor.getCommand())) {
+ String tokens = accessor.getFirstNativeHeader("Authorization");
+ log.info("webSocket token is {}", tokens);
+ if (StrUtil.isBlank(tokens)) {
+ return null;
+ }
+ OAuth2Authentication auth2Authentication = tokenService.loadAuthentication(tokens.split(" ")[1]);
+ SecurityContextHolder.getContext().setAuthentication(auth2Authentication);
+ accessor.setUser(() -> (String) auth2Authentication.getPrincipal());
+ }
+ return message;
+ }
+ });
+ }
+}
diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/listener/LeaveProcessTaskListener.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/listener/LeaveProcessTaskListener.java
index 0e2addf43..012b27613 100644
--- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/listener/LeaveProcessTaskListener.java
+++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/listener/LeaveProcessTaskListener.java
@@ -22,11 +22,14 @@ import com.pig4cloud.pigx.admin.api.entity.SysUser;
import com.pig4cloud.pigx.admin.api.feign.RemoteUserService;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.core.util.SpringContextHolder;
+import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder;
import com.pig4cloud.pigx.common.security.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -45,18 +48,26 @@ public class LeaveProcessTaskListener implements TaskListener {
*/
@Override
public void notify(DelegateTask delegateTask) {
+ SimpMessagingTemplate simpMessagingTemplate = SpringContextHolder.getBean(SimpMessagingTemplate.class);
RemoteUserService userService = SpringContextHolder.getBean(RemoteUserService.class);
R> result = userService.ancestorUsers(SecurityUtils.getUsername());
+ List
- * WebSocket配置类 - */ -@Configuration -@EnableWebSocketMessageBroker -public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { - @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/ws") - .setAllowedOrigins("*") - .withSockJS(); - } - - @Override - public void configureMessageBroker(MessageBrokerRegistry registry) { - registry.setUserDestinationPrefix("/user/"); - } -} diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java index dad9ab42a..b0d5e49c2 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessEventHandler.java @@ -18,10 +18,7 @@ package com.pig4cloud.pigx.auth.handler; import com.pig4cloud.pigx.common.security.handler.AbstractAuthenticationSuccessEventHandler; -import com.pig4cloud.pigx.common.security.service.PigxUser; -import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component; @@ -31,9 +28,7 @@ import org.springframework.stereotype.Component; */ @Slf4j @Component -@AllArgsConstructor public class PigxAuthenticationSuccessEventHandler extends AbstractAuthenticationSuccessEventHandler { - private final SimpMessagingTemplate simpMessagingTemplate; /** * 处理登录成功方法 @@ -44,11 +39,6 @@ public class PigxAuthenticationSuccessEventHandler extends AbstractAuthenticatio */ @Override public void handle(Authentication authentication) { - Object principal = authentication.getPrincipal(); - log.info("用户:{} 登录成功", principal); - PigxUser pigxUser = (PigxUser) principal; - - String user = String.format("%s-%s", pigxUser.getUsername(), pigxUser.getTenantId()); - simpMessagingTemplate.convertAndSendToUser(user, "/loginRemind", pigxUser.getUsername()); + log.info("用户:{} 登录成功", authentication.getPrincipal()); } }