From 5d6d6ce8574c52c8c267f6c655c450cc32a13366 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期日, 08 十月 2023 15:25:51 +0800
Subject: [PATCH] 修改令牌的管理接口

---
 src/main/java/com/lf/server/service/sys/TokenService.java        |  118 +++++++++-----
 src/main/java/com/lf/server/controller/show/ApplyController.java |    2 
 src/main/java/com/lf/server/mapper/sys/TokenMapper.java          |   16 ++
 src/main/java/com/lf/server/controller/sys/TokenController.java  |  128 ++++++++++++++-
 src/main/java/com/lf/server/interceptor/AuthInterceptor.java     |    9 
 src/main/java/com/lf/server/helper/StringHelper.java             |   12 +
 src/main/java/com/lf/server/entity/all/StaticData.java           |    4 
 说明.txt                                                           |  120 ++++----------
 src/main/resources/mapper/sys/TokenMapper.xml                    |   13 +
 9 files changed, 273 insertions(+), 149 deletions(-)

diff --git a/src/main/java/com/lf/server/controller/show/ApplyController.java b/src/main/java/com/lf/server/controller/show/ApplyController.java
index b39f129..3d6f7c2 100644
--- a/src/main/java/com/lf/server/controller/show/ApplyController.java
+++ b/src/main/java/com/lf/server/controller/show/ApplyController.java
@@ -234,7 +234,7 @@
             int rows = applyService.updateForSubmit(ue.getId(), applyEntity.getId(), flowEntity.getId());
 
             applyEntity = applyService.selectById(applyEntity.getId());
-            if (StaticData.TEN == applyEntity.getStatus()) {
+            if (StaticData.I10 == applyEntity.getStatus()) {
                 UserEntity user = userService.selectUser(applyEntity.getUserid());
                 applyService.zipDbData(user, applyEntity);
             }
diff --git a/src/main/java/com/lf/server/controller/sys/TokenController.java b/src/main/java/com/lf/server/controller/sys/TokenController.java
index ed7080d..b27a3e5 100644
--- a/src/main/java/com/lf/server/controller/sys/TokenController.java
+++ b/src/main/java/com/lf/server/controller/sys/TokenController.java
@@ -3,8 +3,11 @@
 import com.lf.server.annotation.SysLog;
 import com.lf.server.controller.all.BaseController;
 import com.lf.server.entity.all.ResponseMsg;
+import com.lf.server.entity.all.SettingData;
+import com.lf.server.entity.all.StaticData;
 import com.lf.server.entity.sys.TokenEntity;
 import com.lf.server.entity.sys.UserEntity;
+import com.lf.server.helper.StringHelper;
 import com.lf.server.service.sys.TokenService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -18,10 +21,9 @@
 
 /**
  * 浠ょ墝琛�
- * @author  sws
+ * @author WWW
  * @date 2022-09-28
  */
-
 @Api(tags = "杩愮淮绠$悊\\浠ょ墝绠$悊")
 @RestController
 @RequestMapping("/token")
@@ -76,25 +78,31 @@
     }
 
     @SysLog()
-    @ApiOperation(value = "鎻掑叆澶氭潯")
+    @ApiOperation(value = "鍒涘缓鏂颁护鐗�")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "list", value = "瀹炰綋绫婚泦鍚�", dataType = "List<TokenEntity>", paramType = "body", example = "")
+            @ApiImplicitParam(name = "type", value = "浠ょ墝绫诲埆锛�0-涓存椂锛�1-鍥哄畾", dataType = "Integer", paramType = "query", example = "1"),
+            @ApiImplicitParam(name = "min", value = "鍒嗛挓鏁帮細榛樿1涓湀", dataType = "Integer", paramType = "query", example = "43200")
     })
-    @PostMapping(value = "/insertTokens", produces = "application/json; charset=UTF-8")
-    public ResponseMsg<Integer> insertTokens(@RequestBody List<TokenEntity> list, HttpServletRequest req) {
+    @GetMapping(value = "/insertNewToken")
+    public ResponseMsg<Object> insertNewToken(Integer type, Integer min, HttpServletRequest req) {
         try {
-            UserEntity ue = tokenService.getCurrentUser(req);
-            if (ue != null) {
-                for (TokenEntity entity : list) {
-                    entity.setCreateUser(ue.getId());
-                }
+            if (null == type || type > 1) {
+                type = 0;
+            }
+            if (null == min || min < StaticData.I10) {
+                min = SettingData.TOKEN_EXPIRE;
             }
 
-            int count = tokenService.insertTokens(list);
+            UserEntity ue = tokenService.getCurrentUser(req);
+            TokenEntity te = tokenService.getNewToken(type, min, ue, req);
+            int rows = tokenService.insertToken(te);
+            if (0 == rows) {
+                return fail("鍒涘缓浠ょ墝澶辫触", null);
+            }
 
-            return success(count);
+            return success(te);
         } catch (Exception ex) {
-            return fail(ex, -1);
+            return fail(ex, null);
         }
     }
 
@@ -125,7 +133,9 @@
             if (ids == null || ids.isEmpty()) {
                 return fail("id鏁扮粍涓嶈兘涓虹┖", -1);
             }
+
             int count = tokenService.deleteTokens(ids);
+
             return success(count);
         } catch (Exception ex) {
             return fail(ex, -1);
@@ -155,6 +165,58 @@
     }
 
     @SysLog()
+    @ApiOperation(value = "鏍规嵁ID鏇存柊浠ょ墝涓哄け鏁�")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "浠ょ墝ID", dataType = "Integer", paramType = "query", example = "6563")
+    })
+    @GetMapping(value = "/updateExpireById")
+    public ResponseMsg<Integer> updateExpireById(Integer id, HttpServletRequest req) {
+        try {
+            if (null == id || id < 0) {
+                return fail("id鍙傛暟鏃犳晥", 0);
+            }
+            TokenEntity entity = tokenService.selectOneById(id);
+            if (null == entity) {
+                return fail("璇d涓嶅瓨鍦�", 0);
+            }
+
+            UserEntity ue = tokenService.getCurrentUser(req);
+            entity.setUpdateUser(ue.getId());
+            int count = tokenService.updateTokenExpire(entity);
+
+            return success(count);
+        } catch (Exception ex) {
+            return fail(ex, -1);
+        }
+    }
+
+    @SysLog()
+    @ApiOperation(value = "鏍规嵁Token鏇存柊浠ょ墝涓哄け鏁�")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "tk", value = "浠ょ墝", dataType = "String", paramType = "query", example = "2edea2a2-e307-4baa-992c-b477ce0566dd")
+    })
+    @GetMapping(value = "/updateExpireByToken")
+    public ResponseMsg<Integer> updateExpireByToken(String tk, HttpServletRequest req) {
+        try {
+            if (StringHelper.isEmpty(tk)) {
+                return fail("token鍙傛暟鏃犳晥", 0);
+            }
+            TokenEntity entity = tokenService.selectOneByToken(tk);
+            if (null == entity) {
+                return fail("璇oken涓嶅瓨鍦ㄦ垨宸插け鏁�", 0);
+            }
+
+            UserEntity ue = tokenService.getCurrentUser(req);
+            entity.setUpdateUser(ue.getId());
+            int count = tokenService.updateTokenExpire(entity);
+
+            return success(count);
+        } catch (Exception ex) {
+            return fail(ex, -1);
+        }
+    }
+
+    @SysLog()
     @ApiOperation(value = "鏍规嵁ID鏌ヨ")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "id", value = "ID", dataType = "Integer", paramType = "query", example = "1658")
@@ -169,4 +231,42 @@
             return fail(ex, null);
         }
     }
+
+    @SysLog()
+    @ApiOperation(value = "鏍规嵁ID鏌ヨ(鏈夋晥鏈熷唴鐨�)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "ID", dataType = "Integer", paramType = "query", example = "6563")
+    })
+    @GetMapping(value = "/selectOneById")
+    public ResponseMsg<TokenEntity> selectOneById(Integer id) {
+        try {
+            if (null == id || id < 0) {
+                return fail("id鍙傛暟鏃犳晥", null);
+            }
+            TokenEntity tokenEntity = tokenService.selectOneById(id);
+
+            return success(tokenEntity);
+        } catch (Exception ex) {
+            return fail(ex, null);
+        }
+    }
+
+    @SysLog()
+    @ApiOperation(value = "鏍规嵁token鏌ヨ(鏈夋晥鏈熷唴鐨�)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "tk", value = "浠ょ墝", dataType = "String", paramType = "query", example = "2edea2a2-e307-4baa-992c-b477ce0566dd")
+    })
+    @GetMapping(value = "/selectOneByToken")
+    public ResponseMsg<TokenEntity> selectOneByToken(String tk) {
+        try {
+            if (StringHelper.isEmpty(tk)) {
+                return fail("token鍙傛暟鏃犳晥", null);
+            }
+            TokenEntity tokenEntity = tokenService.selectOneByToken(tk);
+
+            return success(tokenEntity);
+        } catch (Exception ex) {
+            return fail(ex, null);
+        }
+    }
 }
diff --git a/src/main/java/com/lf/server/entity/all/StaticData.java b/src/main/java/com/lf/server/entity/all/StaticData.java
index a24464a..93e8628 100644
--- a/src/main/java/com/lf/server/entity/all/StaticData.java
+++ b/src/main/java/com/lf/server/entity/all/StaticData.java
@@ -16,13 +16,15 @@
      */
     public static String[] EXCLUDE_PATH = new String[]{"/sign/", "/perms/", "/fmeit/", "/crds/", "/floatserver/", "/wmts/select", "/onemap/", "/swagger", "/error"};
 
+    public final static int I1 = 1;
+
     public final static int TWO = 2;
 
     public final static int FOUR = 4;
 
     public final static int NINE = 9;
 
-    public final static int TEN = 10;
+    public final static int I10 = 10;
 
     public final static int SIXTEEN = 16;
 
diff --git a/src/main/java/com/lf/server/helper/StringHelper.java b/src/main/java/com/lf/server/helper/StringHelper.java
index 855596c..c0ea623 100644
--- a/src/main/java/com/lf/server/helper/StringHelper.java
+++ b/src/main/java/com/lf/server/helper/StringHelper.java
@@ -2,6 +2,7 @@
 
 import com.lf.server.entity.all.StaticData;
 
+import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -193,11 +194,16 @@
 
     /**
      * 鑾峰彇GUID
-     *
-     * @return
      */
     public static String getGuid() {
         return UUID.randomUUID().toString();
+    }
+
+    /**
+     * 鑾峰彇鍒嗛挓宸暟
+     */
+    public static long getMinuteDifference(Timestamp ts) {
+        return (ts.getTime() - new Date().getTime()) / 1000 / 60;
     }
 
     /**
@@ -216,7 +222,7 @@
         StringBuilder sb = new StringBuilder();
         for (T t : list) {
             if (null != t) {
-                sb.append(t.toString() + join);
+                sb.append(t.toString()).append(join);
             }
         }
 
diff --git a/src/main/java/com/lf/server/interceptor/AuthInterceptor.java b/src/main/java/com/lf/server/interceptor/AuthInterceptor.java
index 3d55891..9dd6838 100644
--- a/src/main/java/com/lf/server/interceptor/AuthInterceptor.java
+++ b/src/main/java/com/lf/server/interceptor/AuthInterceptor.java
@@ -64,7 +64,7 @@
             }
 
             // 3.鑾峰彇鐢ㄦ埛浠ょ墝
-            UserEntity ue = sysService.tokenService.getCurrentUser(request);
+            UserEntity ue = sysService.tokenService.getUserByToken(token);
             if (ue == null) {
                 return WebHelper.writeStr2Page(response, NO_LOGIN);
             }
@@ -85,9 +85,8 @@
                 return true;
             }
 
-            // 7.妫�鏌ョ櫧鍚嶅崟
+            // 7.妫�鏌ョ櫧鍚嶅崟鍜孖P涓�鑷存��
             if (!checkWhiteList(ip, request)) {
-                // 妫�鏌P涓�鑷存��
                 if (!checkIpSource(ip, token)) {
                     return WebHelper.writeStr2Page(response, ILLEGAL_TOKEN);
                 }
@@ -172,11 +171,11 @@
     }
 
     /**
-     * 妫�鏌P涓�鑷存��
+     * 妫�鏌P涓�鑷存�э細鍥哄畾浠ょ墝涓嶆鏌�
      */
     private boolean checkIpSource(String ip, String token) {
         TokenEntity te = sysService.tokenService.getEntityByToken(token);
 
-        return te.getIp().equals(ip);
+        return StaticData.I1 == te.getType() || te.getIp().equals(ip);
     }
 }
diff --git a/src/main/java/com/lf/server/mapper/sys/TokenMapper.java b/src/main/java/com/lf/server/mapper/sys/TokenMapper.java
index 0be1a6f..1d4b5c8 100644
--- a/src/main/java/com/lf/server/mapper/sys/TokenMapper.java
+++ b/src/main/java/com/lf/server/mapper/sys/TokenMapper.java
@@ -44,6 +44,22 @@
     public TokenEntity selectToken(int id);
 
     /**
+     * 鏍规嵁id闆嗗悎鏌ヨ
+     *
+     * @param ids
+     * @return
+     */
+    public List<TokenEntity> selectByIds(List<Integer> ids);
+
+    /**
+     * 鏍规嵁id鏌ヨ涓�鏉¤褰�
+     *
+     * @param id
+     * @return
+     */
+    public TokenEntity selectOneById(Integer id);
+
+    /**
      * 鏍规嵁token鍊兼煡璇竴鏉¤褰�
      *
      * @param token
diff --git a/src/main/java/com/lf/server/service/sys/TokenService.java b/src/main/java/com/lf/server/service/sys/TokenService.java
index ec92be1..41f1e68 100644
--- a/src/main/java/com/lf/server/service/sys/TokenService.java
+++ b/src/main/java/com/lf/server/service/sys/TokenService.java
@@ -9,9 +9,9 @@
 import com.lf.server.helper.WebHelper;
 import com.lf.server.mapper.sys.TokenMapper;
 import com.lf.server.service.all.RedisService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Date;
@@ -23,19 +23,18 @@
  * @author sws
  * @date 2022-09-28
  */
-
 @Service
 public class TokenService implements TokenMapper {
-    @Autowired
+    @Resource
     TokenMapper tokenMapper;
 
-    @Autowired
+    @Resource
     UserService usersService;
 
-    @Autowired
+    @Resource
     LoginService loginService;
 
-    @Autowired
+    @Resource
     RedisService redisService;
 
     @Override
@@ -55,6 +54,16 @@
     @Override
     public TokenEntity selectToken(int id) {
         return tokenMapper.selectToken(id);
+    }
+
+    @Override
+    public List<TokenEntity> selectByIds(List<Integer> ids) {
+        return tokenMapper.selectByIds(ids);
+    }
+
+    @Override
+    public TokenEntity selectOneById(Integer id) {
+        return tokenMapper.selectOneById(id);
     }
 
     @Override
@@ -79,11 +88,27 @@
 
     @Override
     public Integer deleteToken(int id) {
+        TokenEntity entity = tokenMapper.selectToken(id);
+        if (null == entity) {
+            return 0;
+        }
+
+        clearCache(entity.getToken());
+
         return tokenMapper.deleteToken(id);
     }
 
     @Override
     public Integer deleteTokens(List<Integer> ids) {
+        List<TokenEntity> list = tokenMapper.selectByIds(ids);
+        if (null == list || list.isEmpty()) {
+            return 0;
+        }
+
+        for (TokenEntity entity : list) {
+            clearCache(entity.getToken());
+        }
+
         return tokenMapper.deleteTokens(ids);
     }
 
@@ -94,6 +119,8 @@
 
     @Override
     public Integer updateTokenExpire(TokenEntity tokenEntity) {
+        clearCache(tokenEntity.getToken());
+
         return tokenMapper.updateTokenExpire(tokenEntity);
     }
 
@@ -101,11 +128,18 @@
      * 鑾峰彇鏂扮殑浠ょ墝瀹炰綋绫�
      */
     public TokenEntity getNewToken(UserEntity ue, HttpServletRequest req) {
+        return getNewToken(0, SettingData.TOKEN_EXPIRE, ue, req);
+    }
+
+    /**
+     * 鑾峰彇鏂扮殑浠ょ墝瀹炰綋绫�
+     */
+    public TokenEntity getNewToken(Integer type, Integer min, UserEntity ue, HttpServletRequest req) {
         TokenEntity te = new TokenEntity();
         te.setToken(WebHelper.getGuid());
-        te.setDuration(SettingData.TOKEN_EXPIRE);
-        te.setExpire(WebHelper.getTimestamp(SettingData.TOKEN_EXPIRE));
-        te.setType(0);
+        te.setDuration(min);
+        te.setExpire(WebHelper.getTimestamp(min));
+        te.setType(type);
         te.setIp(WebHelper.getIpAddress(req));
         te.setCreateUser(ue.getId());
         te.setUname(ue.getUname());
@@ -122,20 +156,9 @@
             return false;
         }
 
-        // redis
-        String tokenKey = RedisCacheKey.signTokenKey(token);
-        if (redisService.hasKey(tokenKey)) {
-            return true;
-        }
+        TokenEntity te = getEntityByToken(token);
 
-        // db
-        TokenEntity te = selectOneByToken(token);
-        if (te != null) {
-            redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES);
-            return true;
-        }
-
-        return false;
+        return null != te;
     }
 
     /**
@@ -143,7 +166,7 @@
      */
     public Boolean logout(String token, HttpServletRequest req, HttpServletResponse res) {
         TokenEntity te = getEntityByToken(token);
-        if (te == null) {
+        if (null == te) {
             return false;
         }
 
@@ -156,16 +179,10 @@
             return false;
         }
 
-        // 娓呴櫎缂撳瓨
-        String tokenKey = RedisCacheKey.signTokenKey(token);
-        redisService.delete(tokenKey);
-        String userKey = RedisCacheKey.signUserKey(te.getToken());
-        redisService.delete(userKey);
-
         // db锛岃缃护鐗岃繃鏈�
         te.setUpdateUser(ue.getId());
         Integer rows = updateTokenExpire(te);
-        if (rows == 0) {
+        if (0 == rows) {
             return false;
         }
 
@@ -177,13 +194,19 @@
     }
 
     /**
+     * 娓呴櫎缂撳瓨
+     */
+    public void clearCache(String token) {
+        String tokenKey = RedisCacheKey.signTokenKey(token);
+        redisService.delete(tokenKey);
+        String userKey = RedisCacheKey.signUserKey(token);
+        redisService.delete(userKey);
+    }
+
+    /**
      * 鏍规嵁浠ょ墝鑾峰彇瀹炰綋
      */
     public TokenEntity getEntityByToken(String token) {
-        if (StringHelper.isNull(token)) {
-            return null;
-        }
-
         String tokenKey = RedisCacheKey.signTokenKey(token);
 
         // redis
@@ -194,8 +217,11 @@
 
         // db
         TokenEntity te = selectOneByToken(token);
-        if (te != null) {
-            redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES);
+        if (null != te) {
+            long min = StringHelper.getMinuteDifference(te.getExpire());
+            if (min > 0) {
+                redisService.put(tokenKey, te, min, TimeUnit.MINUTES);
+            }
         }
 
         return te;
@@ -222,13 +248,20 @@
      */
     public UserEntity getCurrentUser(HttpServletRequest req) {
         String token = WebHelper.getToken(req);
+
+        return getUserByToken(token);
+    }
+
+    /**
+     * 鏍规嵁浠ょ墝鑾峰彇鐢ㄦ埛
+     */
+    public UserEntity getUserByToken(String token) {
         if (StringHelper.isNull(token)) {
             return null;
         }
 
-        String userKey = RedisCacheKey.signUserKey(token);
-
         // redis
+        String userKey = RedisCacheKey.signUserKey(token);
         Object obj = redisService.get(userKey);
         if (obj instanceof UserEntity) {
             return (UserEntity) obj;
@@ -236,11 +269,8 @@
 
         // db
         UserEntity ue = usersService.selectByToken(token);
-        if (ue != null) {
-            TokenEntity te = getEntityByToken(token);
-            if (te != null) {
-                redisService.put(userKey, ue, te.getDuration(), TimeUnit.MINUTES);
-            }
+        if (null != ue) {
+            getEntityByToken(token);
         }
 
         return ue;
@@ -276,6 +306,6 @@
         String key = RedisCacheKey.signPwdError(ue.getUid());
         Object objCount = redisService.get(key);
 
-        return objCount != null && (int) objCount >= SettingData.PWD_ERR_COUNT;
+        return null != objCount && (int) objCount >= SettingData.PWD_ERR_COUNT;
     }
 }
diff --git a/src/main/resources/mapper/sys/TokenMapper.xml b/src/main/resources/mapper/sys/TokenMapper.xml
index 6202595..7d1ae5a 100644
--- a/src/main/resources/mapper/sys/TokenMapper.xml
+++ b/src/main/resources/mapper/sys/TokenMapper.xml
@@ -47,6 +47,19 @@
         where id = #{id}
     </select>
 
+    <select id="selectByIds" resultType="com.lf.server.entity.sys.TokenEntity">
+        select * from lf.sys_token where id in
+        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
+    <select id="selectOneById" resultType="com.lf.server.entity.sys.TokenEntity">
+        select a.*, fn_uname(create_user) createName, fn_uname(update_user) updateName
+        from lf.sys_token a
+        where id = #{id} and expire > now() limit 1
+    </select>
+
     <select id="selectOneByToken" resultType="com.lf.server.entity.sys.TokenEntity">
         select a.*, fn_uname(create_user) createName, fn_uname(update_user) updateName
         from lf.sys_token a
diff --git "a/\350\257\264\346\230\216.txt" "b/\350\257\264\346\230\216.txt"
index 394d986..315e1b7 100644
--- "a/\350\257\264\346\230\216.txt"
+++ "b/\350\257\264\346\230\216.txt"
@@ -1,3 +1,24 @@
+------------------------------------------------------------------------------- 浼樺寲缃戠粶
+gpedit.msc
+璁$畻鏈篭绠$悊妯℃澘\缃戠粶\Qos鏁版嵁鍖呰鍒掔▼搴廫闄愬埗鍙繚鐣欏甫瀹� -> 鍚敤锛�0%
+netsh interface tcp show global # 鏌ョ湅鑷姩浼樺寲绾у埆
+
+銆愮綉缁滆繛鎺ャ�戔啋鍙抽敭銆愬睘鎬с�戔啋銆愰厤缃�戔啋銆愰珮绾с�戔啋銆愬睘鎬с�戔啋銆怲CP/UDP 鏍¢獙鍜屽嵏杞斤紙IPv6鎴栬�匢Pv4锛夈�戔啋鍙宠竟鐨勩�愬�笺�戦�夋嫨绂佺敤銆� 
+銆� 婕父涓诲姩鎬� 銆戔啋銆愭渶浣庡�笺��
+銆愰�熷害/鍙屽伐銆戠殑銆愬�笺�戔啋銆�100MB 鍏ㄥ弻宸ャ�戙��
+銆愮數婧愮鐞嗐�戝叧闂�"鍏佽璁$畻鏈哄叧闂璁惧浠ヨ妭绾︾敤鐢�".
+
+ipconfig /flushdns # 鍒锋柊DNS缂撳瓨
+TCPOptimizer.exe锛岃嚜鍔ㄤ紭鍖�
+
+regedit.msc
+HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows
+鏂板缓椤圭洰 Psched锛屽彸鍑绘柊寤� NonBestEfortLimit锛孌WORD(32-浣�)鍊间负 0銆�
+------------------------------------------------------------------------------- Postgres淇敼Data
+https://www.landui.com/docs-1599
+HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-14
+淇敼 ImagePath锛�"C:\Program Files\PostgreSQL\14cm\bin\pg_ctl.exe" runservice -N "postgresql-x64-14" -D "C:\Program Files\PostgreSQL\14cm\data" -w
+net start postgresql-x64-14 # 閲嶅惎
 -------------------------------------------------------------------------------
 Access锛歨ttps://blog.csdn.net/weixin_43407520/article/details/122165848
 GDAL锛歨ttps://www.cnblogs.com/unlockth/p/14062076.html
@@ -15,59 +36,32 @@
 https://blog.csdn.net/qq_43444401/article/details/125649414
 https://blog.csdn.net/qq_43961619/article/details/124627871
 
-http://127.0.0.1:12316/dict/selectCount?tab=sys_user
-http://127.0.0.1:12316/Dict/selectByPage?tab=sys_user&pageSize=10&pageIndex=0
-
-http://127.0.0.1:12316/Style/selectCount?name=edp
-http://127.0.0.1:12316/Style/selectByPage?name=edp&pageSize=10&pageIndex=0
-
-http://127.0.0.1/lf/sg/login.html
+Druid锛歨ttp://127.0.0.1:12316/server/druid/index.html
 http://127.0.0.1:12316/swagger-ui.html
-http://192.168.20.106:12316/swagger-ui.html
-http://localhost:12316/sign/toIndex
-http://localhost:12316/sign/toLogin
 http://127.0.0.1:12316/sign/toLogin?service=http://www.sina.com.cn
-------------------------------------------------------------------------------- 闂璁板綍
-1.鍦ㄧ嚎鍒跺浘锛氬嚭鍥炬垚鍔熻鎻愮ず淇℃伅锛岃姹傝兘澶熷畾鍒跺瓧浣撳ぇ灏忋�佺鍙锋樉绀虹瓑
-2.绯荤粺鐩戞帶锛氱姸鎬佷俊鎭厑璁稿鍑鸿〃鏍� *
-3.鍦颁笅妯″紡锛氭寕杞藉湴涓嬫ā鍨�
-4.涓夌淮鐗瑰畾鏍煎紡锛�3dm锛宔ff
-5.鏁版嵁鍙戝竷锛氭彁渚沇MS鏈嶅姟鍦板潃锛�100.10.1.169锛�103.85.165.99:8050
-6.Druid锛歨ttp://127.0.0.1:12316/server/druid/index.html
-7.Index锛歨ttp://103.85.165.99:8052/web
 ------------------------------------------------------------------------------- Java涓嶱ostgres绫诲瀷瀵瑰簲
-	java8		    postgreSQL
-1	LocalDate		date
-2	LocalTime		time
-3	LocalDateTime	timestamp without timezone
-4	OffsetDateTime	timestamp with timezone
-5	String		    varchar
-6	String		    text
-7	Integer		    int2
-8	Integer		    int4
-9	Long		    int8
-10	Float		    float4
-11	Double		    float8
-12	BigDecimal	    numeric
-13	Boolean		    bool
-------------------------------------------------------------------------------- 鏈搴旂殑Controller
-data/DownloadController
-data/MetaFileController
-sys/AttachController
-sys/MsgController
-
-http://127.0.0.1/data/test.kml锛岃法鍩燂細
+java8		              postgreSQL
+LocalDate		        date
+LocalTime		        time
+LocalDateTime	  timestamp without timezone
+OffsetDateTime	timestamp with timezone
+String		              varchar
+String		              text
+Integer		            int2
+Integer		            int4
+Long		              int8
+Float		              float4
+Double		            float8
+BigDecimal	        numeric
+Boolean		          bool
+------------------------------------------------------------------------------- 璺ㄥ煙
 chrome://flags/#block-insecure-private-network-requests
 Block insecure private network requests. -> Disabled
 
 杩涘叆bin鐩綍锛岃緭鍏ワ細ogrinfo --formats锛屼腑鍥界煶娌瑰ぉ鐒舵皵绠¢亾宸ョ▼鏈夐檺鍏徃
--------------------------------------------------------------------------------
+
 java鍜宩s瀹炵幇aes鍔犲瘑瑙e瘑锛�
 https://blog.csdn.net/weixin_30663839/article/details/114049667
-
-http://192.168.20.39:12306/
-http://192.168.20.39:12315/
-http://192.168.20.39:12316/
 http://192.168.20.39:12316/server/druid/sql.html
 -------------------------------------------------------------------------------
 String path = System.getProperty("user.dir");
@@ -99,46 +93,10 @@
 鏈嶅姟绔細鏍稿績妗嗘灦锛歋pringBoot锛屾寔涔呭眰妗嗘灦锛歁ybatis锛屽畨鍏ㄦ鏋讹細Shiro锛岀紦瀛橈細redis
 鍓嶇锛欽S妗嗘灦锛歷ue.js锛屼富椤垫鏋讹細adminLTE(鍩轰簬Bootstrap)锛岃〃鏍兼彃浠讹細jqGrid锛屾爲褰㈣〃鏍硷細tree-table锛屾爲褰㈡彃浠讹細ztree锛屽脊绐楃粍浠讹細layer锛岃〃鍗曟牎楠岋細validator
 private static final String SQLSERVER_URL = "jdbc:sqlserver://192.168.0.77\\ZKZS; databaseName=xian";
-------------------------------------------------------------------------------- floatserver
+
 http://localhost:12316/floatserver/checkout/license
 String str = EntityUtils.toString(entity, "UTF-8");
 java -jar C:\360\luyten054\luyten-0.5.4.jar
-
-璇锋眰锛�8dfb75298185cbcc4b2d485fdb4f25627f7aeb4dd41329076b5015586e4d56cf755f0dfd19be0d80e2573e0a2a22edca35215b390607b0ff68deab90c69296df60934315036bd8a64ee668a39502754b701be7534d0ca2e790161194d673d9454c44c570a1dbe604ac5952be731ca15809f9f4d43ad1b023f69981ce77abacc50e8e5217627eb236d5f6d114e00585d9a597f3a195b0b0c0ff8cf1e2445ca12e
-鍝嶅簲锛�8dfb75298185cbcc4b2d485fdb4f25627f7aeb4dd41329076b5015586e4d56cfe2c56f12cd9852c447904210117b41fe2672b24d7e82fd581ad5a0983b501b5bcbe97d65dbbe770dbdc4a98e80d2966a71ecd0041a5282283bff853d70caf7aed671bc9c9d4bedf6d1d0294394861af40f195d68a965d957d53c78aa50ada3afc65d1a526c54648e6e081e8f7f7ab1c31b9f75916170e638b0b9216d30204864afe3a7a1bc8a6563bf44daf6a29e27c19f798c4f82dbb904ea4aa4fcc87a82226d9bf3e891ecb97b94263064fec025e3aa7c440d7c0e8ed559b84ae2438ec0fc438444a03c992883170ecdde20e08552efcf9d584de469930b27c81f946548d5c6e63e815671182b03b5e6e622ddb10a3f6a35ad3f44ec247a3b2dee0e936020d48efb7abc2d2abfb555f61d54c85eca
-
-{"machineId":"dba5c0f908f92fbdb6f0a3f58a5a3193","isRegistered":true,"registeredModules":[1,3,4,9,10,11,12,13,17,25,30,33,37],"modules":[{"id":1,"name":"wms","group":"GISServer","title":"鍔ㄦ�佸湴鍥炬湇鍔�"},{"id":3,"name":"tms","group":"GISServer","title":"鐡︾墖鍦板浘鏈嶅姟"},{"id":9,"name":"wfs","group":"GISServer","title":"瑕佺礌鏈嶅姟"},{"id":12,"name":"wns","group":"GISServer","title":"缃戠粶鍒嗘瀽鏈嶅姟"},{"id":13,"name":"geocode","group":"GISServer","title":"鍦扮悊缂栫爜鏈嶅姟"},{"id":17,"name":"wcs","group":"GISServer","title":"鏍呮牸鏈嶅姟"},{"id":25,"name":"c3d","group":"GISServer","title":"涓夌淮妯″瀷鏈嶅姟"},{"id":30,"name":"cts","group":"GISServer","title":"涓夌淮鍦板舰鏈嶅姟"},{"id":33,"name":"cimservice","group":"CIMSuite","title":"璇箟妯″瀷鏈嶅姟"},{"id":37,"name":"websdk","group":"WEBSDK","title":"WEBSDK"},{"id":38,"name":"pw","group":"Parallelworld","title":" Parallelworld"},{"id":50,"name":"ext","group":"extension","title":"extension"}],"expireDate":1668486201730,"isFloating":true,"floatServerIp":"192.168.20.106","floatServerPort":12316,"message":"OK","success":true}
-{"id":"dba5c0f908f92fbdb6f0a3f58a5a3193","expireDate":"2023-01-17","localId":"192.168.20.106|E0-70-EA-AA-B6-43","availableNum":12,"time":1668394770458,"licenseCode":"78a82f0920de0f557f8177bec1e48601c4dc25e4054a00728e4314b56528d3a1632de5298edee38a65412277977a174fea5d91c452b19ef138dbc2ba089ba632"}
-------------------------------------------------------------------------------- 鏉冮檺
-绠¢亾鍩虹澶ф暟鎹钩鍙帮細           鍒犻櫎
-缁煎悎灞曠ず\缁煎悎灞曠ず\鏌ヨ锛�       涓嬭浇銆佷笂浼�
-缁煎悎灞曠ず\缁煎悎灞曠ず\鏍囩粯锛�       鏂板銆佷慨鏀广�佸垹闄�
-缁煎悎灞曠ず\涓撻鍥撅細             缁熻
-缁煎悎灞曠ず\璧勬枡棣嗭細             涓嬭浇
--------------------------------------------
-鏁版嵁绠$悊\鏁版嵁涓婁紶锛�           鏂板銆佷慨鏀广�佸垹闄ゃ�佷笂浼犮�佷笅杞�
-鏁版嵁绠$悊\鐩綍绠$悊锛�           鏂板銆佷慨鏀广�佸垹闄�
-鏁版嵁绠$悊\鏁版嵁妫�绱細           鏂板銆佷慨鏀广�佸垹闄ゃ�佷笂浼犮�佷笅杞�
-鏁版嵁绠$悊\鐗堟湰绠$悊锛�           鏂板銆佷慨鏀广�佸垹闄�
-鏁版嵁绠$悊\瀛楀吀绠$悊锛�           鏂板銆佷慨鏀广�佸垹闄�
-鏁版嵁绠$悊\鍏冩暟鎹鐞�:          鏂板銆佷慨鏀广�佸垹闄ゃ�佷笂浼犮�佷笅杞�
-鏁版嵁绠$悊\鏍峰紡绠$悊锛�           鏂板銆佷慨鏀广�佸垹闄ゃ�佷笂浼犮�佷笅杞�
--------------------------------------------
-杩愮淮绠$悊\绯荤粺绠$悊\鑿滃崟绠$悊锛�   鏂板銆佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\绯荤粺绠$悊\鐢ㄦ埛绠$悊锛�   鏂板銆佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\绯荤粺绠$悊\鍗曚綅绠$悊锛�   鏂板銆佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\绯荤粺绠$悊\璧勬簮绠$悊锛�   鏂板銆佷慨鏀广�佸垹闄ゃ�佷笂浼�
-杩愮淮绠$悊\绯荤粺绠$悊\瑙掕壊绠$悊锛�   鏂板銆佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\绯荤粺绠$悊\鏉冮檺绠$悊锛�   鏂板銆佷慨鏀广�佸垹闄�
-
-杩愮淮绠$悊\鎺堟潈绠$悊\鐢ㄦ埛瑙掕壊鎺堟潈锛氭柊澧炪�佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\鎺堟潈绠$悊\鑿滃崟鏉冮檺鎺堟潈锛氭柊澧炪�佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\鎺堟潈绠$悊\瑙掕壊鑿滃崟鎺堟潈锛氭柊澧炪�佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\鎺堟潈绠$悊\瑙掕壊璧勬簮鎺堟潈锛氭柊澧炪�佷慨鏀广�佸垹闄�
-
-杩愮淮绠$悊\杩愮淮鐩戞帶\浠ょ墝绠$悊锛�   鏂板銆佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\杩愮淮鐩戞帶\榛戠櫧/鍚嶅崟锛�  鏂板銆佷慨鏀广�佸垹闄�
-杩愮淮绠$悊\绯荤粺閰嶇疆:           淇敼
 ------------------------------------------------------------------------------- Java Web鎿嶄綔
 String getMethod() // 鑾峰彇璇锋眰鏂瑰紡: GET
 // 鑾峰彇铏氭嫙鐩綍(涓婁笅鏂囩洰褰�)锛氳櫄鎷熻矾寰勯�氳繃鍦╝pplication閰嶇疆褰撲腑鍙互閰嶇疆

--
Gitblit v1.9.3