diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSocketConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSocketConfig.java index fb3f9aeb6..0e60586af 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSocketConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/WebSocketConfig.java @@ -6,18 +6,23 @@ import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBr import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +/** + * @author new + *
+ * 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