From ccf84496e105138b0b9f032d02453d4c21b30b52 Mon Sep 17 00:00:00 2001 From: jiangqiang Date: Sat, 6 Aug 2022 11:07:03 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=8A=A8=E6=80=81token=20=E7=94=B3?= =?UTF-8?q?=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dbapi/basic/service/AppTokenService.java | 2 - dbapi-ui/src/components/api/request.vue | 259 ++++++++---------- dbapi-ui/src/components/token/token.vue | 35 ++- 3 files changed, 145 insertions(+), 151 deletions(-) diff --git a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java index a96e5ac..10608fe 100644 --- a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java +++ b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java @@ -80,8 +80,6 @@ public class AppTokenService { } // 设置了有效的失效时间 else if (expireTime > 0) { -// System.out.println(expireTime); -// System.out.println(System.currentTimeMillis()); if (expireTime > System.currentTimeMillis()) { return appToken.getAppId(); } else { diff --git a/dbapi-ui/src/components/api/request.vue b/dbapi-ui/src/components/api/request.vue index d3dfaca..14ac2fe 100644 --- a/dbapi-ui/src/components/api/request.vue +++ b/dbapi-ui/src/components/api/request.vue @@ -1,120 +1,93 @@ -- Gitee From f11407815092633027587355bfe438dcd92fc95d Mon Sep 17 00:00:00 2001 From: freakchicken Date: Wed, 7 Sep 2022 06:53:03 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=E5=8A=A0=E5=AF=86=E8=A7=A3=E5=AF=86?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E9=80=82=E9=85=8Djdk11+?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: freakchicken --- .../dbapi/basic/util/DESUtils.java | 91 +++---------------- 1 file changed, 12 insertions(+), 79 deletions(-) diff --git a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/DESUtils.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/DESUtils.java index 7bbb76a..1406b9c 100644 --- a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/DESUtils.java +++ b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/DESUtils.java @@ -1,31 +1,25 @@ package com.gitee.freakchicken.dbapi.basic.util; import org.apache.commons.codec.binary.Base64; -import org.apache.commons.io.IOUtils; -import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; -import javax.crypto.Cipher; -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.DESKeySpec; import java.io.IOException; -import java.security.*; public class DESUtils { - private final static String DES = "DES"; private final static String ENCODE = "UTF-8"; - private final static String DES_KEY = PropertiesUtil.getKey("dbapi.secret.key"); - public static void main(String[] args) { String pass = "root123456"; - System.out.println("加密前: " + pass); + + try { - String encrypt = encrypt(pass); - System.err.println("加密后: " + encrypt); - System.err.println("解密后: " + decrypt(encrypt)); + String s = Base64.encodeBase64String(pass.getBytes(ENCODE)); + System.out.println(s); + + byte[] bytes = Base64.decodeBase64(s); + String s1 = new String(bytes, ENCODE); + System.out.println(s1); + } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -41,9 +35,7 @@ public class DESUtils { * @throws Exception */ public static String encrypt(String data) throws Exception { - byte[] bt = encrypt(data.getBytes(ENCODE), DES_KEY.getBytes(ENCODE)); - String strs = new BASE64Encoder().encode(bt); - return strs; + return Base64.encodeBase64String(data.getBytes(ENCODE)); } /** @@ -57,67 +49,8 @@ public class DESUtils { public static String decrypt(String data) throws Exception { if (data == null) return null; - BASE64Decoder decoder = new BASE64Decoder(); - byte[] buf = decoder.decodeBuffer(data); - byte[] bt = decrypt(buf, DES_KEY.getBytes(ENCODE)); - return new String(bt, ENCODE); + byte[] bytes = Base64.decodeBase64(data); + return new String(bytes, ENCODE); } - /** - * Description 根据键值进行加密 - * - * @param data - * @param key 加密键byte数组 - * @return - * @throws Exception - */ - private static byte[] encrypt(byte[] data, byte[] key) throws Exception { - // 生成一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); - - // 从原始密钥数据创建DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); - - // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); - SecretKey securekey = keyFactory.generateSecret(dks); - - // Cipher对象实际完成加密操作 - Cipher cipher = Cipher.getInstance(DES); - - // 用密钥初始化Cipher对象 - cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); - - return cipher.doFinal(data); - } - - /** - * Description 根据键值进行解密 - * - * @param data - * @param key 加密键byte数组 - * @return - * @throws Exception - */ - private static byte[] decrypt(byte[] data, byte[] key) throws Exception { - // 生成一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); - - // 从原始密钥数据创建DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); - - // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); - SecretKey securekey = keyFactory.generateSecret(dks); - - // Cipher对象实际完成解密操作 - Cipher cipher = Cipher.getInstance(DES); - - // 用密钥初始化Cipher对象 - cipher.init(Cipher.DECRYPT_MODE, securekey, sr); - - return cipher.doFinal(data); - } - - } \ No newline at end of file -- Gitee From 97aa45388944726cfd2f033714465d644467d12d Mon Sep 17 00:00:00 2001 From: freakchicken Date: Wed, 7 Sep 2022 06:58:35 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E8=AF=B7=E6=B1=82=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E5=8F=82=E6=95=B0=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: freakchicken --- dbapi-ui/src/components/api/request.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dbapi-ui/src/components/api/request.vue b/dbapi-ui/src/components/api/request.vue index 14ac2fe..5a6a501 100644 --- a/dbapi-ui/src/components/api/request.vue +++ b/dbapi-ui/src/components/api/request.vue @@ -39,8 +39,8 @@ v-show="contentType === CONTENT_TYPE.JSON"> @@ -57,7 +57,7 @@ @@ -67,7 +67,7 @@ :key="childIndex" > -- Gitee From db41b9213bf90b534a7b9b004bdd93583590f4b2 Mon Sep 17 00:00:00 2001 From: jiangqiang Date: Fri, 9 Sep 2022 19:52:43 +0800 Subject: [PATCH 4/4] =?UTF-8?q?ehcache=20=E7=BC=93=E5=AD=98key=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbapi-assembly/pom.xml | 2 +- dbapi-cluster-apiServer/pom.xml | 2 +- dbapi-cluster-gateway/pom.xml | 2 +- dbapi-cluster-manager/pom.xml | 2 +- dbapi-common/pom.xml | 2 +- dbapi-controller/pom.xml | 2 +- dbapi-plugin/pom.xml | 2 +- dbapi-service/pom.xml | 2 +- .../dbapi/basic/filter/ApiAuthFilter.java | 2 ++ .../dbapi/basic/service/AppService.java | 10 ++++++-- .../dbapi/basic/service/AppTokenService.java | 19 +++++++++------ .../dbapi/basic/servlet/APIServlet.java | 24 ++++++++----------- .../dbapi/basic/util/Constants.java | 9 +++++++ .../src/main/resources/application.properties | 2 +- dbapi-service/src/main/resources/ehcache.xml | 14 +++++------ dbapi-standalone/pom.xml | 2 +- dbapi-ui/pom.xml | 2 +- pom.xml | 2 +- 18 files changed, 60 insertions(+), 42 deletions(-) create mode 100644 dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/Constants.java diff --git a/dbapi-assembly/pom.xml b/dbapi-assembly/pom.xml index 5ddea4d..8f40871 100644 --- a/dbapi-assembly/pom.xml +++ b/dbapi-assembly/pom.xml @@ -5,7 +5,7 @@ com.gitee.freakchicken.dbapi dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-cluster-apiServer/pom.xml b/dbapi-cluster-apiServer/pom.xml index d78e9a4..f15ae75 100644 --- a/dbapi-cluster-apiServer/pom.xml +++ b/dbapi-cluster-apiServer/pom.xml @@ -5,7 +5,7 @@ dbapi com.gitee.freakchicken.dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-cluster-gateway/pom.xml b/dbapi-cluster-gateway/pom.xml index f27e738..549f3ca 100644 --- a/dbapi-cluster-gateway/pom.xml +++ b/dbapi-cluster-gateway/pom.xml @@ -5,7 +5,7 @@ dbapi com.gitee.freakchicken.dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-cluster-manager/pom.xml b/dbapi-cluster-manager/pom.xml index 6dea54b..250e61e 100644 --- a/dbapi-cluster-manager/pom.xml +++ b/dbapi-cluster-manager/pom.xml @@ -5,7 +5,7 @@ dbapi com.gitee.freakchicken.dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-common/pom.xml b/dbapi-common/pom.xml index 48ade3f..f02ef9d 100644 --- a/dbapi-common/pom.xml +++ b/dbapi-common/pom.xml @@ -5,7 +5,7 @@ com.gitee.freakchicken.dbapi dbapi - 3.1.1 + 3.1.2 4.0.0 dbapi-common diff --git a/dbapi-controller/pom.xml b/dbapi-controller/pom.xml index 0fcc5ad..6ebe1d8 100644 --- a/dbapi-controller/pom.xml +++ b/dbapi-controller/pom.xml @@ -5,7 +5,7 @@ dbapi com.gitee.freakchicken.dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-plugin/pom.xml b/dbapi-plugin/pom.xml index cdf3706..f6e7eb7 100644 --- a/dbapi-plugin/pom.xml +++ b/dbapi-plugin/pom.xml @@ -5,7 +5,7 @@ com.gitee.freakchicken.dbapi dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-service/pom.xml b/dbapi-service/pom.xml index 988b190..9e61de0 100644 --- a/dbapi-service/pom.xml +++ b/dbapi-service/pom.xml @@ -5,7 +5,7 @@ dbapi com.gitee.freakchicken.dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/filter/ApiAuthFilter.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/filter/ApiAuthFilter.java index c095671..535ca49 100644 --- a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/filter/ApiAuthFilter.java +++ b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/filter/ApiAuthFilter.java @@ -68,12 +68,14 @@ public class ApiAuthFilter implements Filter { } else { String appId = tokenService.verifyToken(tokenStr); if (appId == null) { + log.error("token[{}] matched no appid", tokenStr); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.getWriter().append(JSON.toJSONString(ResponseDto.fail("Token Invalid!"))); return; } else { List authGroups = appService.getAuthGroups(appId); if (!authGroups.contains(config.getGroupId())) { + log.error("token[{}] matched appid[{}], but appid not authorized", tokenStr, appId); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.getWriter().append(JSON.toJSONString(ResponseDto.fail("Token Invalid!"))); return; diff --git a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppService.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppService.java index 6d26564..530c5a8 100644 --- a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppService.java +++ b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppService.java @@ -4,9 +4,11 @@ import com.gitee.freakchicken.dbapi.basic.dao.ApiAuthMapper; import com.gitee.freakchicken.dbapi.basic.dao.AppInfoMapper; import com.gitee.freakchicken.dbapi.basic.domain.ApiAuth; import com.gitee.freakchicken.dbapi.basic.domain.AppInfo; +import com.gitee.freakchicken.dbapi.basic.util.Constants; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @@ -26,6 +28,9 @@ public class AppService { @Autowired private MetaDataCacheManager metaDataCacheManager; + @Autowired + CacheManager cacheManager; + @Transactional public AppInfo add(AppInfo app) { app.setId(RandomStringUtils.random(16, true, true)); @@ -55,11 +60,12 @@ public class AppService { @Transactional public void delete(String appid) { appInfoMapper.deleteById(appid); + cacheManager.getCache(Constants.EHCACHE_APP_AUTH_GROUPS).evict(appid); } @Transactional - @CacheEvict(value = "app_AuthGroups", key = "#appId") public void auth(String appId, String groupIds) { + cacheManager.getCache(Constants.EHCACHE_APP_AUTH_GROUPS).evictIfPresent(appId); apiAuthMapper.deleteByAppId(appId); if (StringUtils.isNoneBlank(groupIds)) { String[] split = groupIds.split(","); @@ -73,9 +79,9 @@ public class AppService { metaDataCacheManager.cleanTokenAuthMetaCacheIfCluster(appId); } - @Cacheable(value = "app_AuthGroups", key = "#appId", unless = "#result == null") public List getAuthGroups(String appId) { List list = apiAuthMapper.selectByAppId(appId); + cacheManager.getCache(Constants.EHCACHE_APP_AUTH_GROUPS).putIfAbsent(appId, list); return list; } } \ No newline at end of file diff --git a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java index 10608fe..ed3a00b 100644 --- a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java +++ b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/service/AppTokenService.java @@ -4,12 +4,15 @@ package com.gitee.freakchicken.dbapi.basic.service; import com.gitee.freakchicken.dbapi.basic.dao.AppInfoMapper; import com.gitee.freakchicken.dbapi.basic.domain.AppInfo; import com.gitee.freakchicken.dbapi.basic.domain.AppToken; +import com.gitee.freakchicken.dbapi.basic.util.Constants; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; @Service +@Slf4j public class AppTokenService { @Autowired private AppInfoMapper appInfoMapper; @@ -43,16 +46,17 @@ public class AppTokenService { appToken.setToken(token); appToken.setAppId(appId); + //最新token存入缓存 - cacheManager.getCache("token_app").putIfAbsent(token, appToken); + cacheManager.getCache(Constants.EHCACHE_TOKEN_APP).putIfAbsent(token, appToken); //clean old token - String oldToken = cacheManager.getCache("app_token").get(appId, String.class); + String oldToken = cacheManager.getCache(Constants.EHCACHE_APP_TOKEN).get(appId, String.class); if (oldToken != null) - cacheManager.getCache("token_app").evict(oldToken); + cacheManager.getCache(Constants.EHCACHE_TOKEN_APP).evict(oldToken); //appid和最新token关系记录下来 - cacheManager.getCache("app_token").putIfAbsent(appId, token); + cacheManager.getCache(Constants.EHCACHE_APP_TOKEN).putIfAbsent(appId, token); return appToken; } } @@ -64,14 +68,14 @@ public class AppTokenService { * @return */ public String verifyToken(String token) { - AppToken appToken = cacheManager.getCache("token_app").get(token, AppToken.class); + AppToken appToken = cacheManager.getCache(Constants.EHCACHE_TOKEN_APP).get(token, AppToken.class); if (appToken == null) { return null; } else { Long expireTime = appToken.getExpireTime(); // 单次失效 if (expireTime == 0) { - cacheManager.getCache("token_app").evict(token); + cacheManager.getCache(Constants.EHCACHE_TOKEN_APP).evict(token); return appToken.getAppId(); } // 永久有效 @@ -84,7 +88,8 @@ public class AppTokenService { return appToken.getAppId(); } else { // token已经过期就清除 - cacheManager.getCache("token_app").evict(token); + cacheManager.getCache(Constants.EHCACHE_TOKEN_APP).evict(token); + log.error("token [{}] expired!", token); throw new RuntimeException("token expired!"); } } else { diff --git a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/servlet/APIServlet.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/servlet/APIServlet.java index 12b9a6f..b1ac933 100644 --- a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/servlet/APIServlet.java +++ b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/servlet/APIServlet.java @@ -4,26 +4,25 @@ import com.alibaba.druid.pool.DruidPooledConnection; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; -import com.gitee.freakchicken.dbapi.basic.service.*; - +import com.gitee.freakchicken.dbapi.basic.domain.DataSource; +import com.gitee.freakchicken.dbapi.basic.service.ApiConfigService; +import com.gitee.freakchicken.dbapi.basic.service.ApiService; +import com.gitee.freakchicken.dbapi.basic.service.DataSourceService; +import com.gitee.freakchicken.dbapi.basic.service.IPService; +import com.gitee.freakchicken.dbapi.basic.util.JdbcUtil; import com.gitee.freakchicken.dbapi.basic.util.PoolManager; +import com.gitee.freakchicken.dbapi.basic.util.SqlEngineUtil; import com.gitee.freakchicken.dbapi.basic.util.ThreadUtils; import com.gitee.freakchicken.dbapi.common.ApiConfig; import com.gitee.freakchicken.dbapi.common.ApiSql; import com.gitee.freakchicken.dbapi.common.ResponseDto; -import com.gitee.freakchicken.dbapi.basic.domain.DataSource; import com.gitee.freakchicken.dbapi.plugin.AlarmPlugin; import com.gitee.freakchicken.dbapi.plugin.CachePlugin; import com.gitee.freakchicken.dbapi.plugin.PluginManager; import com.gitee.freakchicken.dbapi.plugin.TransformPlugin; - -import com.gitee.freakchicken.dbapi.basic.util.JdbcUtil; -import com.gitee.freakchicken.dbapi.basic.util.SqlEngineUtil; import com.github.freakchick.orange.SqlMeta; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.apache.http.entity.ContentType; -import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; @@ -39,10 +38,9 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; -import java.text.MessageFormat; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.ExecutorService; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @Slf4j @Component @@ -57,8 +55,6 @@ public class APIServlet extends HttpServlet { @Autowired IPService ipService; -// @Autowired -// MailService mailService; @Value("${dbapi.api.context}") String apiContext; diff --git a/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/Constants.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/Constants.java new file mode 100644 index 0000000..981e5b4 --- /dev/null +++ b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/Constants.java @@ -0,0 +1,9 @@ +package com.gitee.freakchicken.dbapi.basic.util; + +public class Constants { + + public static String EHCACHE_APP_TOKEN = "app_token"; + public static String EHCACHE_TOKEN_APP = "token_app"; + public static String EHCACHE_APP_AUTH_GROUPS = "app_AuthGroups"; + +} diff --git a/dbapi-service/src/main/resources/application.properties b/dbapi-service/src/main/resources/application.properties index dd7b10a..fb6473f 100644 --- a/dbapi-service/src/main/resources/application.properties +++ b/dbapi-service/src/main/resources/application.properties @@ -1,4 +1,4 @@ -version=3.1.1 +version=3.1.2 server.servlet.encoding.force=true server.servlet.encoding.charset=UTF-8 diff --git a/dbapi-service/src/main/resources/ehcache.xml b/dbapi-service/src/main/resources/ehcache.xml index 4645602..b6e96fb 100644 --- a/dbapi-service/src/main/resources/ehcache.xml +++ b/dbapi-service/src/main/resources/ehcache.xml @@ -10,17 +10,17 @@ overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="3600" memoryStoreEvictionPolicy="LRU"/> - - + - - + - + diff --git a/dbapi-standalone/pom.xml b/dbapi-standalone/pom.xml index 57d4d9b..e377d0d 100644 --- a/dbapi-standalone/pom.xml +++ b/dbapi-standalone/pom.xml @@ -5,7 +5,7 @@ com.gitee.freakchicken.dbapi dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/dbapi-ui/pom.xml b/dbapi-ui/pom.xml index 3087ef0..eb5a984 100644 --- a/dbapi-ui/pom.xml +++ b/dbapi-ui/pom.xml @@ -5,7 +5,7 @@ com.gitee.freakchicken.dbapi dbapi - 3.1.1 + 3.1.2 4.0.0 diff --git a/pom.xml b/pom.xml index 8c482e2..76c97b0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.gitee.freakchicken.dbapi dbapi - 3.1.1 + 3.1.2 DBApi build http api from sql without other code -- Gitee