Explorar el Código

禁用用户时,踢出用户登录

zhou-hao hace 3 años
padre
commit
cb6df631d5

+ 6 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/configuration/AuthorizationServiceAutoConfiguration.java

@@ -4,6 +4,7 @@ import org.hswebframework.ezorm.rdb.mapping.ReactiveRepository;
 import org.hswebframework.web.authorization.ReactiveAuthenticationInitializeService;
 import org.hswebframework.web.authorization.ReactiveAuthenticationManagerProvider;
 import org.hswebframework.web.authorization.simple.DefaultAuthorizationAutoConfiguration;
+import org.hswebframework.web.authorization.token.UserTokenManager;
 import org.hswebframework.web.system.authorization.api.UserDimensionProvider;
 import org.hswebframework.web.system.authorization.api.service.reactive.ReactiveUserService;
 import org.hswebframework.web.system.authorization.defaults.service.*;
@@ -69,6 +70,11 @@ public class AuthorizationServiceAutoConfiguration {
             return new DefaultPermissionService();
         }
 
+        @Bean
+        @ConditionalOnBean(UserTokenManager.class)
+        public RemoveUserTokenWhenUserDisabled removeUserTokenWhenUserDisabled(UserTokenManager tokenManager){
+            return new RemoveUserTokenWhenUserDisabled(tokenManager);
+        }
     }
 
     @Bean

+ 38 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/RemoveUserTokenWhenUserDisabled.java

@@ -0,0 +1,38 @@
+package org.hswebframework.web.system.authorization.defaults.service;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.hswebframework.web.authorization.token.UserTokenManager;
+import org.hswebframework.web.system.authorization.api.event.UserModifiedEvent;
+import org.hswebframework.web.system.authorization.api.event.UserStateChangedEvent;
+import org.springframework.context.event.EventListener;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+@AllArgsConstructor
+@Slf4j
+public class RemoveUserTokenWhenUserDisabled {
+
+    private final UserTokenManager userTokenManager;
+
+    @EventListener
+    public void handleStateChangeEvent(UserModifiedEvent event) {
+        if (event.getUserEntity().getStatus() != null && event.getUserEntity().getStatus() != 1) {
+            event.async(
+                    Mono.just(event.getUserEntity().getId())
+                        .flatMap(userTokenManager::signOutByUserId)
+            );
+        }
+    }
+
+    @EventListener
+    public void handleStateChangeEvent(UserStateChangedEvent event) {
+        if (event.getState() != 1) {
+            event.async(
+                    Flux.fromIterable(event.getUserIdList())
+                        .flatMap(userTokenManager::signOutByUserId)
+            );
+        }
+    }
+
+}