Explorar o código

Merge remote-tracking branch 'origin/master'

zhouhao %!s(int64=7) %!d(string=hai) anos
pai
achega
eb31f208bb
Modificáronse 23 ficheiros con 82 adicións e 132 borrados
  1. 3 3
      hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/DefaultUserTokenManager.java
  2. 7 1
      hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/TokenState.java
  3. 20 3
      hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/UserToken.java
  4. 2 2
      hsweb-authorization/hsweb-authorization-api/src/test/java/org/hswebframework/web/authorization/UserTokenManagerTests.java
  5. 2 3
      hsweb-message/README.md
  6. 11 0
      hsweb-message/hsweb-message-api/pom.xml
  7. 2 3
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/starter/MemoryMessagerAutoConfiguration.java
  8. 0 0
      hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/memory/MemoryMessager.java
  9. 0 2
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryPublish.java
  10. 0 2
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopic.java
  11. 0 2
      hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopicSubscribe.java
  12. 1 1
      hsweb-message/hsweb-message-memory/src/main/resources/META-INF/spring.factories
  13. 0 26
      hsweb-message/hsweb-message-memory/pom.xml
  14. 0 52
      hsweb-message/hsweb-message-memory/src/test/java/org/hswebframework/web/message/memory/MemoryMessagerTest.java
  15. 10 16
      hsweb-message/hsweb-message-websocket/pom.xml
  16. 3 0
      hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/handler/CommandWebSocketMessageDispatcher.java
  17. 3 3
      hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/message/DefaultWebSocketMessager.java
  18. 3 3
      hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/starter/CommandWebSocketAutoConfiguration.java
  19. 0 4
      hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/TestProcessor.java
  20. 0 4
      hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/WebSocketServerTests.java
  21. 0 1
      hsweb-message/pom.xml
  22. 1 1
      hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/BasicAuthorizationTokenParser.java
  23. 14 0
      hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-web/src/main/java/org/hswebframework/web/controller/dictionary/DictionaryController.java

+ 3 - 3
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/DefaultUserTokenManager.java

@@ -135,7 +135,7 @@ public class DefaultUserTokenManager implements UserTokenManager {
             return false;
         }
         for (UserToken userToken : getByUserId(userId)) {
-            if (userToken.isEffective()) {
+            if (userToken.isNormal()) {
                 return true;
             }
         }
@@ -247,7 +247,7 @@ public class DefaultUserTokenManager implements UserTokenManager {
                     .filter(userToken -> type.equals(userToken.getType()))
                     .map(SimpleUserToken.class::cast)
                     .peek(this::checkTimeout)
-                    .anyMatch(UserToken::isEffective);
+                    .anyMatch(UserToken::isNormal);
             if (hasAnotherToken) {
                 throw new AccessDenyException("该用户已在其他地方登陆");
             }
@@ -261,7 +261,7 @@ public class DefaultUserTokenManager implements UserTokenManager {
                 }
             }
         }
-        detail.setState(TokenState.effective);
+        detail.setState(TokenState.normal);
         tokenStorage.put(token, detail);
 
         getUserToken(userId).add(token);

+ 7 - 1
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/TokenState.java

@@ -13,8 +13,14 @@ public enum TokenState implements EnumDict<String> {
     /**
      * 正常,有效
      */
+    @Deprecated
     effective("effective", "正常"),
 
+    /**
+     * 正常,有效
+     */
+    normal("normal","正常"),
+
     /**
      * 已被禁止访问
      */
@@ -27,6 +33,7 @@ public enum TokenState implements EnumDict<String> {
 
     /**
      * 已被踢下线
+     * @see AllopatricLoginMode#offlineOther
      */
     offline("offline", "用户已在其他地方登录"),
 
@@ -35,7 +42,6 @@ public enum TokenState implements EnumDict<String> {
      */
     lock("lock", "登录状态已被锁定");
 
-
     private String value;
 
     private String text;

+ 20 - 3
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/UserToken.java

@@ -54,8 +54,13 @@ public interface UserToken extends Serializable, Comparable<UserToken> {
     /**
      * @return 是否正常
      */
+    @Deprecated
     default boolean isEffective() {
-        return getState() == TokenState.effective;
+        return isNormal();
+    }
+
+    default boolean isNormal() {
+        return getState() == TokenState.normal;
     }
 
     /**
@@ -72,8 +77,17 @@ public interface UserToken extends Serializable, Comparable<UserToken> {
         return getState() == TokenState.offline;
     }
 
+    default boolean isLock() {
+        return getState() == TokenState.lock;
+    }
+
+    default boolean isDeny() {
+        return getState() == TokenState.deny;
+    }
+
+
     default boolean validate() {
-        if (!isEffective()) {
+        if (!isNormal()) {
             throw new UnAuthorizedException(getState());
         }
         return true;
@@ -81,6 +95,9 @@ public interface UserToken extends Serializable, Comparable<UserToken> {
 
     @Override
     default int compareTo(UserToken target) {
-        return Long.valueOf(getSignInTime()).compareTo(target.getSignInTime());
+        if (target == null) {
+            return 0;
+        }
+        return Long.compare(getSignInTime(), target.getSignInTime());
     }
 }

+ 2 - 2
hsweb-authorization/hsweb-authorization-api/src/test/java/org/hswebframework/web/authorization/UserTokenManagerTests.java

@@ -65,7 +65,7 @@ public class UserTokenManagerTests {
         } catch (AccessDenyException e) {
 
         }
-        Assert.assertTrue(userTokenManager.getByToken("test").isEffective());
+        Assert.assertTrue(userTokenManager.getByToken("test").isNormal());
         Assert.assertTrue(userTokenManager.getByToken("test2")==null);
 
     }
@@ -82,7 +82,7 @@ public class UserTokenManagerTests {
 
         userTokenManager.signIn("test2", "sessionId", "admin", 30000);
 
-        Assert.assertTrue(userTokenManager.getByToken("test2").isEffective());
+        Assert.assertTrue(userTokenManager.getByToken("test2").isNormal());
 
         Assert.assertTrue(userTokenManager.getByToken("test").isOffline());
 

+ 2 - 3
hsweb-message/README.md

@@ -2,9 +2,8 @@
 
 1. [hsweb-message-api](hsweb-message-api) API
 2. [hsweb-message-jms](hsweb-message-jms) JMS实现
-3. [hsweb-message-memory](hsweb-message-memory) 内存实现
-4. [hsweb-message-redis](hsweb-message-redis) Redis实现(redisson)
-5. [hsweb-message-websocket](hsweb-message-websocket) 使用websocket进行消息推送
+3. [hsweb-message-redis](hsweb-message-redis) Redis实现(redisson)
+4. [hsweb-message-websocket](hsweb-message-websocket) 使用websocket进行消息推送
 
 
 ## API

+ 11 - 0
hsweb-message/hsweb-message-api/pom.xml

@@ -11,4 +11,15 @@
 
     <artifactId>hsweb-message-api</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
 </project>

+ 2 - 3
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/starter/MemoryMessagerAutoConfiguration.java

@@ -1,6 +1,5 @@
-package org.hswebframework.web.message.memory.starter;
+package org.hswebframework.web.message;
 
-import org.hswebframework.web.message.Messager;
 import org.hswebframework.web.message.memory.MemoryMessager;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
@@ -13,7 +12,7 @@ import org.springframework.context.annotation.Configuration;
  */
 @Configuration
 @ConditionalOnMissingBean(Messager.class)
-public class MemoryMessagerAutoConfiguration {
+public class MessagerAutoConfiguration {
     @Bean
     public Messager messager() {
         return new MemoryMessager();

hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryMessager.java → hsweb-message/hsweb-message-api/src/main/java/org/hswebframework/web/message/memory/MemoryMessager.java


+ 0 - 2
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryPublish.java

@@ -13,8 +13,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
 public class MemoryPublish implements MessagePublish {

+ 0 - 2
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopic.java

@@ -9,8 +9,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
 class MemoryTopic<M extends Message> {

+ 0 - 2
hsweb-message/hsweb-message-memory/src/main/java/org/hswebframework/web/message/memory/MemoryTopicSubscribe.java

@@ -7,8 +7,6 @@ import java.util.UUID;
 import java.util.function.Consumer;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
 public class MemoryTopicSubscribe<M extends Message> implements MessageSubscribe<M> {

+ 1 - 1
hsweb-message/hsweb-message-memory/src/main/resources/META-INF/spring.factories

@@ -1,3 +1,3 @@
 # Auto Configure
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.hswebframework.web.message.memory.starter.MemoryMessagerAutoConfiguration
+org.hswebframework.web.message.MessagerAutoConfiguration

+ 0 - 26
hsweb-message/hsweb-message-memory/pom.xml

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>hsweb-message</artifactId>
-        <groupId>org.hswebframework.web</groupId>
-        <version>3.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>hsweb-message-memory</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-message-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-</project>

+ 0 - 52
hsweb-message/hsweb-message-memory/src/test/java/org/hswebframework/web/message/memory/MemoryMessagerTest.java

@@ -1,52 +0,0 @@
-package org.hswebframework.web.message.memory;
-
-import org.hswebframework.web.message.MessageSubscribe;
-import org.hswebframework.web.message.Messager;
-import org.hswebframework.web.message.support.TextMessage;
-import org.junit.Test;
-
-import static org.hswebframework.web.message.builder.StaticMessageBuilder.text;
-import static org.hswebframework.web.message.builder.StaticMessageSubjectBuilder.queue;
-import static org.hswebframework.web.message.builder.StaticMessageSubjectBuilder.topic;
-
-/**
- * TODO 完成注释
- *
- * @author zhouhao
- */
-public class MemoryMessagerTest {
-
-    private Messager messager = new MemoryMessager();
-
-    @Test
-    public void testQueue() throws InterruptedException {
-        for (int i = 0; i < 5; i++) {
-            int x = i;
-            MessageSubscribe<TextMessage> sub = messager.subscribe(queue("test"));
-            sub.onMessage(msg -> System.out.println(x + msg.getMessage()));
-        }
-        for (int i = 0; i < 10; i++) {
-            Thread.sleep(200);
-            messager.publish(text("hello queue" + i))
-                    .to(queue("test")).send();
-        }
-
-        Thread.sleep(1000);
-    }
-
-    @Test
-    public void testTopic() throws InterruptedException {
-        for (int i = 0; i < 5; i++) {
-            int x = i;
-            MessageSubscribe<TextMessage> sub = messager.subscribe(topic("test"));
-            sub.onMessage(msg -> System.out.println(x + msg.getMessage()));
-        }
-        for (int i = 0; i < 10; i++) {
-            Thread.sleep(200);
-            messager.publish(text("hello queue" + i))
-                    .to(topic("test")).send();
-        }
-
-        Thread.sleep(1000);
-    }
-}

+ 10 - 16
hsweb-message/hsweb-message-websocket/pom.xml

@@ -19,12 +19,6 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-message-memory</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
 
         <!--<dependency>-->
             <!--<groupId>org.hswebframework.web</groupId>-->
@@ -59,19 +53,19 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-tomcat</artifactId>
-                </exclusion>
-            </exclusions>
+            <!--<exclusions>-->
+                <!--<exclusion>-->
+                    <!--<groupId>org.springframework.boot</groupId>-->
+                    <!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
+                <!--</exclusion>-->
+            <!--</exclusions>-->
         </dependency>
 
         <!--使用undertow作为web容器-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-undertow</artifactId>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.springframework.boot</groupId>-->
+            <!--<artifactId>spring-boot-starter-undertow</artifactId>-->
+        <!--</dependency>-->
 
         <dependency>
             <groupId>org.hswebframework.web</groupId>

+ 3 - 0
hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/handler/CommandWebSocketMessageDispatcher.java

@@ -139,6 +139,7 @@ public class CommandWebSocketMessageDispatcher extends TextWebSocketHandler {
 
     @Override
     public void afterConnectionEstablished(WebSocketSession session) throws Exception {
+        logger.debug("new WebSocket Session Established,sessionId:{}",session.getId());
         if (tokenParsers != null) {
             String token = tokenParsers.stream()
                     .map(parser -> parser.parseToken(session))
@@ -168,6 +169,8 @@ public class CommandWebSocketMessageDispatcher extends TextWebSocketHandler {
 
     @Override
     public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
+        logger.debug("WebSocket Session Closed,sessionId:{}",session.getId());
+
         ThreadLocalUtils.clear();
         if (webSocketSessionListeners != null) {
             webSocketSessionListeners.forEach(webSocketSessionListener ->

+ 3 - 3
hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/message/DefaultWebSocketMessager.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.socket.message;
 
+import lombok.extern.slf4j.Slf4j;
 import org.hswebframework.web.concurrent.counter.Counter;
 import org.hswebframework.web.concurrent.counter.CounterManager;
 import org.hswebframework.web.concurrent.counter.SimpleCounterManager;
@@ -20,10 +21,9 @@ import static org.hswebframework.web.message.builder.StaticMessageBuilder.object
 import static org.hswebframework.web.message.builder.StaticMessageSubjectBuilder.*;
 
 /**
- * TODO 完成注释
- *
  * @author zhouhao
  */
+@Slf4j
 public class DefaultWebSocketMessager implements WebSocketMessager {
 
     private Messager messager;
@@ -95,7 +95,7 @@ public class DefaultWebSocketMessager implements WebSocketMessager {
                     }
                     socketSession.sendMessage(new TextMessage(((ObjectMessage) message).getObject().toString()));
                 } catch (IOException e) {
-                    e.printStackTrace();
+                    log.error("execute WebSocket command {} error",command,e);
                 }
             });
             return new MessageSubscribeSession(subscribe, socketSession) {

+ 3 - 3
hsweb-message/hsweb-message-websocket/src/main/java/org/hswebframework/web/socket/starter/CommandWebSocketAutoConfiguration.java

@@ -82,14 +82,14 @@ public class CommandWebSocketAutoConfiguration {
     @ConfigurationProperties(prefix = "hsweb.websocket")
     public ServletServerContainerFactoryBean createServletServerContainerFactoryBean() {
         ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
-        container.setMaxTextMessageBufferSize(10_1024_1024);
-        container.setMaxBinaryMessageBufferSize(10_1024_1024);
+        container.setMaxTextMessageBufferSize(10 * 1024 * 1024);
+        container.setMaxBinaryMessageBufferSize(10 * 1024 * 1024);
         return container;
     }
 
     @Configuration
     @ConfigurationProperties(prefix = "hsweb.websocket")
-    public static class HandlerConfigruation extends WebSocketConfigurationSupport {
+    public static class HandlerConfiguration extends WebSocketConfigurationSupport {
         private String[] allowedOrigins;
 
         public void setAllowedOrigins(String[] allowedOrigins) {

+ 0 - 4
hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/TestProcessor.java

@@ -60,10 +60,6 @@ public class TestProcessor implements CommandProcessor, WebSocketSessionListener
         }).start();
     }
 
-    @Override
-    public void destroy() {
-    }
-
     @Override
     public void onSessionConnect(WebSocketSession session) {
 

+ 0 - 4
hsweb-message/hsweb-message-websocket/src/test/java/org/hswebframework/web/socket/WebSocketServerTests.java

@@ -23,10 +23,6 @@ public class WebSocketServerTests {
        // System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES", "*");
     }
 //
-    @Bean
-    public Messager messager() {
-        return new MemoryMessager();
-    }
 
 //    @Bean(destroyMethod = "shutdown")
 //    public RedissonClient redissonClient(){

+ 0 - 1
hsweb-message/pom.xml

@@ -16,7 +16,6 @@
         <module>hsweb-message-jms</module>
         <module>hsweb-message-redis</module>
         <module>hsweb-message-websocket</module>
-        <module>hsweb-message-memory</module>
     </modules>
 
 

+ 1 - 1
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-starter/src/main/java/org/hswebframework/web/authorization/starter/BasicAuthorizationTokenParser.java

@@ -41,7 +41,7 @@ public class BasicAuthorizationTokenParser implements UserTokenForTypeParser {
         try {
             String usernameAndPassword = new String(Base64.decodeBase64(authorization));
             UserToken token = userTokenManager.getByToken(usernameAndPassword);
-            if (token != null && token.isEffective()) {
+            if (token != null && token.isNormal()) {
                 return new ParsedToken() {
                     @Override
                     public String getToken() {

+ 14 - 0
hsweb-system/hsweb-system-dictionary/hsweb-system-dictionary-web/src/main/java/org/hswebframework/web/controller/dictionary/DictionaryController.java

@@ -25,6 +25,7 @@ import org.hswebframework.web.controller.SimpleGenericEntityController;
 import org.hswebframework.web.controller.message.ResponseMessage;
 import org.hswebframework.web.dict.DictDefine;
 import org.hswebframework.web.dict.DictDefineRepository;
+import org.hswebframework.web.dict.ItemDefine;
 import org.hswebframework.web.dictionary.api.DictionaryService;
 import org.hswebframework.web.dictionary.api.entity.DictionaryEntity;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +34,10 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
 import static org.hswebframework.web.controller.message.ResponseMessage.*;
 
 /**
@@ -65,4 +70,13 @@ public class DictionaryController implements SimpleGenericEntityController<Dicti
         return ok(repository.getDefine(id));
     }
 
+    @GetMapping("/define/{id:.+}/items")
+    @Authorize(merge = false)
+    @ApiOperation("获取数据字典选项信息")
+    public ResponseMessage<List<ItemDefine>> getItemDefineById(@PathVariable String id) {
+        return ok(Optional.ofNullable(repository.getDefine(id))
+                .map(DictDefine::getItems)
+                .orElse(Collections.emptyList()));
+    }
+
 }