diff --git a/dbapi-assembly/pom.xml b/dbapi-assembly/pom.xml index 5ddea4d6f7f4a14d0703f77a4c1930fd0d9108f2..8f40871537b64ffab6ebee06c5ffc9fbe2a3ffd7 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 d78e9a42289acf423d4b2e28c80f365e566a2c4c..f15ae75322cd93aa36734a6d63c73cd0946fe53f 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 f27e7382333b6d71fdcd12653c79bbb9f1c6c597..549f3ca882d46ec19405489e9a86bd49327be426 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 6dea54b8c9bf2e4d8ee4693f64b1249b397635a6..250e61ecea5cd0af2e0b9dd366edd228922e2b7d 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 48ade3f3e5c3ace015c609ef24700e846396c575..f02ef9d1184489f6810e7685249c91011cfea219 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 0fcc5ad8b5390a78dec3cffa0d77ac077766e286..6ebe1d84dd815475666f18aa2f93621a1330a1ac 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 cdf3706e41cbcaf2a5123b19a6d0d1e3484e7b3e..f6e7eb7dd87dd6b5010f10b3861f8b4e740f3b1e 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 988b190206275624a487f63b60f6508bac80ca8c..9e61de0284ac20e6bb9b23095b01eeabc46ac45f 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 c09567140e6eebce6dce1136f0d3110d6b554fd3..535ca4966ba90bbc70a7bc2d43ec8410af329791 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 6d26564a95ee5d957bac70122ce558884bcc9539..530c5a85528a4e0353c21eea5047d876c44a70c5 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 a96e5ac7997cc93ff2995e19b331abc31e5805a8..ed3a00bf9c3cea43e3779a7e35151dce7f8e2366 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(); } // 永久有效 @@ -80,13 +84,12 @@ public class AppTokenService { } // 设置了有效的失效时间 else if (expireTime > 0) { -// System.out.println(expireTime); -// System.out.println(System.currentTimeMillis()); if (expireTime > System.currentTimeMillis()) { 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 12b9a6f6030757e07b55c75b0b7a33e3350b22d3..b1ac9333ca4f08a1a86e7ffd013eaca3fab72d41 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 0000000000000000000000000000000000000000..981e5b495524138cadf207b94bfd19a5c9389762 --- /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/java/com/gitee/freakchicken/dbapi/basic/util/DESUtils.java b/dbapi-service/src/main/java/com/gitee/freakchicken/dbapi/basic/util/DESUtils.java index 7bbb76a23cfee274b4ff3563c4711b361c012699..1406b9cefa98782c6d079da3a07406936ef54762 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 diff --git a/dbapi-service/src/main/resources/application.properties b/dbapi-service/src/main/resources/application.properties index dd7b10a4e4f7ec08dd8f99e68afba3d744b22bd9..fb6473f0f0bb633e517b19b1c9e33a4b52eb4570 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 4645602256b8e09b4bbde6853db92fbfe433481c..b6e96fbccb0a04a0fa8a8daddbf16764fab74f5c 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 57d4d9beef6a3c262fb30af1502027d599db97d1..e377d0d74e8d481ae0c9b4ab8da0a129c8d171c5 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 3087ef06def7db34b0b3c99de77f2076fffb1d39..eb5a9848a024d98a5848b97ca24b795a11d6b945 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/dbapi-ui/src/components/api/request.vue b/dbapi-ui/src/components/api/request.vue index d3dfaca2380b7a18ff53f56728298fbe5f777dd5..5a6a501ef6303d98556090e0ce9fe4a42796df55 100644 --- a/dbapi-ui/src/components/api/request.vue +++ b/dbapi-ui/src/components/api/request.vue @@ -1,120 +1,93 @@ diff --git a/pom.xml b/pom.xml index 8c482e295b48f925e27a2ee92e7946d81c012809..76c97b06fe508f4dd397d2a78bb048bee1e2a96b 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