vincent 3 жил өмнө
parent
commit
149679b0fd

+ 65 - 33
server/src/main/java/edp/core/utils/TokenUtils.java

@@ -43,7 +43,8 @@ import static edp.core.consts.Consts.EMPTY;
 
 @Slf4j
 @Component
-public class TokenUtils {
+public class TokenUtils
+{
 
     /**
      * 自定义 token 私钥
@@ -72,7 +73,8 @@ public class TokenUtils {
     };
 
 
-    public static String randomPassword() {
+    public static String randomPassword()
+    {
         IntStream intStream = new Random().ints(0, PASSWORD_SEEDS.length);
         return intStream.limit(PASSWORD_LEN).mapToObj(i -> PASSWORD_SEEDS[i]).map(String::valueOf).collect(Collectors.joining());
     }
@@ -84,7 +86,8 @@ public class TokenUtils {
      * @param tokenDetail
      * @return
      */
-    public String generateToken(TokenDetail tokenDetail) {
+    public String generateToken(TokenDetail tokenDetail)
+    {
         Map<String, Object> claims = new HashMap<String, Object>();
         claims.put(Consts.TOKEN_USER_NAME, StringUtils.isEmpty(tokenDetail.getUsername()) ? EMPTY : tokenDetail.getUsername());
         claims.put(Consts.TOKEN_USER_PASSWORD, StringUtils.isEmpty(tokenDetail.getPassword()) ? EMPTY : tokenDetail.getPassword());
@@ -98,10 +101,13 @@ public class TokenUtils {
      * @param token
      * @return
      */
-    public String refreshToken(String token) {
-        Claims claims = getClaims(token);
-        claims.put(Consts.TOKEN_CREATE_TIME, System.currentTimeMillis());
-        return generate(claims);
+    public String refreshToken(String token)
+    {
+//        Claims claims = getClaims(token);
+//        claims.put(Consts.TOKEN_CREATE_TIME, System.currentTimeMillis());
+//        return generate(claims);
+        return token;
+
     }
 
 
@@ -112,7 +118,8 @@ public class TokenUtils {
      * @param timeOutMillis (毫秒)
      * @return
      */
-    public String generateToken(TokenDetail tokenDetail, Long timeOutMillis) {
+    public String generateToken(TokenDetail tokenDetail, Long timeOutMillis)
+    {
         Map<String, Object> claims = new HashMap<String, Object>();
         claims.put(Consts.TOKEN_USER_NAME, StringUtils.isEmpty(tokenDetail.getUsername()) ? EMPTY : tokenDetail.getUsername());
         claims.put(Consts.TOKEN_USER_PASSWORD, StringUtils.isEmpty(tokenDetail.getPassword()) ? EMPTY : tokenDetail.getPassword());
@@ -127,12 +134,14 @@ public class TokenUtils {
      * @param tokenDetail
      * @return
      */
-    public String generateContinuousToken(TokenDetail tokenDetail) {
+    public String generateContinuousToken(TokenDetail tokenDetail)
+    {
         Map<String, Object> claims = new HashMap<String, Object>();
         claims.put(Consts.TOKEN_USER_NAME, StringUtils.isEmpty(tokenDetail.getUsername()) ? EMPTY : tokenDetail.getUsername());
         claims.put(Consts.TOKEN_USER_PASSWORD, StringUtils.isEmpty(tokenDetail.getPassword()) ? EMPTY : tokenDetail.getPassword());
         claims.put(Consts.TOKEN_CREATE_TIME, System.currentTimeMillis());
-        try {
+        try
+        {
             return Jwts.builder()
                     .setClaims(claims)
                     .setSubject(claims.get(Consts.TOKEN_USER_NAME).toString())
@@ -140,7 +149,8 @@ public class TokenUtils {
                             SignatureAlgorithm.valueOf(ALGORITHM) :
                             SignatureAlgorithm.HS512, TOKEN_SECRET.getBytes("UTF-8"))
                     .compact();
-        } catch (UnsupportedEncodingException ex) {
+        } catch (UnsupportedEncodingException ex)
+        {
             log.warn(ex.getMessage());
             return Jwts.builder()
                     .setClaims(claims)
@@ -158,14 +168,17 @@ public class TokenUtils {
      * @param claims
      * @return
      */
-    private String generate(Map<String, Object> claims) {
+    private String generate(Map<String, Object> claims)
+    {
         return toTokenString(TIMEOUT, claims);
     }
 
-    private String toTokenString(Long timeOutMillis, Map<String, Object> claims) {
+    private String toTokenString(Long timeOutMillis, Map<String, Object> claims)
+    {
         Long expiration = Long.parseLong(claims.get(Consts.TOKEN_CREATE_TIME) + EMPTY) + timeOutMillis;
 
-        try {
+        try
+        {
             return Jwts.builder()
                     .setClaims(claims)
                     .setSubject(claims.get(Consts.TOKEN_USER_NAME).toString())
@@ -174,7 +187,8 @@ public class TokenUtils {
                             SignatureAlgorithm.valueOf(ALGORITHM) :
                             SignatureAlgorithm.HS512, TOKEN_SECRET.getBytes("UTF-8"))
                     .compact();
-        } catch (UnsupportedEncodingException ex) {
+        } catch (UnsupportedEncodingException ex)
+        {
             log.warn(ex.getMessage());
             return Jwts.builder()
                     .setClaims(claims)
@@ -193,12 +207,15 @@ public class TokenUtils {
      * @param token
      * @return
      */
-    public String getUsername(String token) {
+    public String getUsername(String token)
+    {
         String username = null;
-        try {
+        try
+        {
             final Claims claims = getClaims(token);
             username = claims.get(Consts.TOKEN_USER_NAME).toString();
-        } catch (Exception e) {
+        } catch (Exception e)
+        {
             e.printStackTrace();
         }
         return username;
@@ -210,12 +227,15 @@ public class TokenUtils {
      * @param token
      * @return
      */
-    public String getPassword(String token) {
+    public String getPassword(String token)
+    {
         String password = null;
-        try {
+        try
+        {
             final Claims claims = getClaims(token);
             password = claims.get(Consts.TOKEN_USER_PASSWORD).toString();
-        } catch (Exception e) {
+        } catch (Exception e)
+        {
             e.printStackTrace();
         }
         return password;
@@ -227,16 +247,19 @@ public class TokenUtils {
      * @param token
      * @return
      */
-    private Claims getClaims(String token) {
+    private Claims getClaims(String token)
+    {
         Claims claims;
-        try {
+        try
+        {
             claims = Jwts.parser()
                     .setSigningKey(TOKEN_SECRET.getBytes("UTF-8"))
                     .parseClaimsJws(token.startsWith(Consts.TOKEN_PREFIX) ?
                             token.substring(token.indexOf(Consts.TOKEN_PREFIX) + Consts.TOKEN_PREFIX.length()).trim() :
                             token.trim())
                     .getBody();
-        } catch (Exception e) {
+        } catch (Exception e)
+        {
             claims = Jwts.parser()
                     .setSigningKey(TOKEN_SECRET)
                     .parseClaimsJws(token.startsWith(Consts.TOKEN_PREFIX) ?
@@ -254,7 +277,8 @@ public class TokenUtils {
      * @param tokenDetail
      * @return
      */
-    public boolean validateToken(String token, TokenDetail tokenDetail) {
+    public boolean validateToken(String token, TokenDetail tokenDetail)
+    {
         TokenDetail user = (TokenDetail) tokenDetail;
         String username = getUsername(token);
         String password = getPassword(token);
@@ -269,7 +293,8 @@ public class TokenUtils {
      * @param password
      * @return
      */
-    public boolean validateToken(String token, String username, String password) {
+    public boolean validateToken(String token, String username, String password)
+    {
         String tokenUsername = getUsername(token);
         String tokenPassword = getPassword(token);
         return (username.equals(tokenUsername) && password.equals(tokenPassword) && !(isExpired(token)));
@@ -281,12 +306,15 @@ public class TokenUtils {
      * @param token
      * @return
      */
-    private Date getCreatedDate(String token) {
+    private Date getCreatedDate(String token)
+    {
         Date created = null;
-        try {
+        try
+        {
             final Claims claims = getClaims(token);
             created = new Date((Long) claims.get(Consts.TOKEN_CREATE_TIME));
-        } catch (Exception e) {
+        } catch (Exception e)
+        {
             e.printStackTrace();
         }
         return created;
@@ -298,12 +326,15 @@ public class TokenUtils {
      * @param token
      * @return
      */
-    private Date getExpirationDate(String token) {
+    private Date getExpirationDate(String token)
+    {
         Date expiration = null;
-        try {
+        try
+        {
             final Claims claims = getClaims(token);
             expiration = claims.getExpiration();
-        } catch (Exception e) {
+        } catch (Exception e)
+        {
             e.printStackTrace();
         }
         return expiration;
@@ -315,7 +346,8 @@ public class TokenUtils {
      * @param token
      * @return
      */
-    private Boolean isExpired(String token) {
+    private Boolean isExpired(String token)
+    {
         final Date expiration = getExpirationDate(token);
         //超时时间为空则永久有效
         return null == expiration ? false : expiration.before(new Date(System.currentTimeMillis()));

+ 157 - 37
server/src/main/java/edp/davinci/controller/SourceController.java

@@ -20,6 +20,7 @@
 package edp.davinci.controller;
 
 import com.alibaba.druid.util.StringUtils;
+import edp.core.annotation.AuthIgnore;
 import edp.core.annotation.CurrentUser;
 import edp.core.model.DBTables;
 import edp.core.model.TableInfo;
@@ -45,13 +46,15 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
 
 @Api(value = "/sources", tags = "sources", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 @ApiResponses(@ApiResponse(code = 404, message = "sources not found"))
 @RestController
 @RequestMapping(value = Constants.BASE_API_PATH + "/sources", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-public class SourceController extends BaseController {
+public class SourceController extends BaseController
+{
 
     @Autowired
     private SourceService sourceService;
@@ -69,8 +72,10 @@ public class SourceController extends BaseController {
     @GetMapping
     public ResponseEntity getSources(@RequestParam Long projectId,
                                      @ApiIgnore @CurrentUser User user,
-                                     HttpServletRequest request) {
-        if (invalidId(projectId)) {
+                                     HttpServletRequest request)
+    {
+        if (invalidId(projectId))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -89,15 +94,103 @@ public class SourceController extends BaseController {
     @ApiOperation(value = "get tree sources")
     @GetMapping(value = "/treeSources")
     public ResponseEntity getTreeSources(@RequestParam Long projectId,
-                                     @ApiIgnore @CurrentUser User user,
-                                     HttpServletRequest request) {
-        if (invalidId(projectId)) {
-            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
-            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
-        }
+                                         @ApiIgnore @CurrentUser User user,
+                                         HttpServletRequest request)
+    {
+//        if (invalidId(projectId))
+//        {
+//            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
+//            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+//        }
         List<Source> sources = sourceService.getSources(projectId, user);
+        List<SourceTreeInfo> sourceTreeInfos = new ArrayList<SourceTreeInfo>();
+        List<Source> rootNodes = getRootNodes(sources);
+        for (Source rootNode : rootNodes)
+        {
+            SourceTreeInfo sourceTreeInfo = new SourceTreeInfo();
+            BeanUtils.copyProperties(rootNode, sourceTreeInfo);
+            buildChildNodes(sourceTreeInfo, rootNode, sources);
+            sourceTreeInfos.add(sourceTreeInfo);
+        }
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(sourceTreeInfos));
+    }
 
-        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(sources));
+    /**
+     * 递归子节点
+     *
+     * @param node
+     */
+    public void buildChildNodes(SourceTreeInfo sourceTreeInfo, Source node, List<Source> treeNodesList)
+    {
+        List<Source> children = getChildNodes(node, treeNodesList);
+        if (!children.isEmpty())
+        {
+            for (Source child : children)
+            {
+                buildChildNodes(sourceTreeInfo, child, treeNodesList);
+            }
+            sourceTreeInfo.setNodes(children);
+        }
+    }
+
+    /**
+     * 获取父节点下所有的子节点
+     *
+     * @param nodes
+     * @param pnode
+     * @return
+     */
+    public List getChildNodes(Source pnode, List<Source> treeNodesList)
+    {
+        List childNodes = new ArrayList();
+        for (Source n : treeNodesList)
+        {
+            if (pnode.getId().equals(n.getPId()))
+            {
+                childNodes.add(n);
+            }
+        }
+        return childNodes;
+    }
+
+    /**
+     * 判断是否为根节点
+     *
+     * @param nodes
+     * @param inNode
+     * @return
+     */
+    public boolean rootNode(Source node, List<Source> treeNodesList)
+    {
+        boolean isRootNode = true;
+        for (Source n : treeNodesList)
+        {
+            if (null!= node.getPId() && node.getPId().equals(n.getId()))
+            {
+                isRootNode = false;
+                break;
+            }
+        }
+        return isRootNode;
+    }
+
+    /**
+     * 获取集合中所有的根节点
+     *
+     * @param nodes
+     * @return
+     */
+    public List getRootNodes(List<Source> treeNodesList)
+    {
+        List rootNodes = new ArrayList();
+        for (Source n : treeNodesList)
+        {
+            if (rootNode(n, treeNodesList))
+            {
+                rootNodes.add(n);
+            }
+        }
+        return rootNodes;
     }
 
 
@@ -113,8 +206,10 @@ public class SourceController extends BaseController {
     @GetMapping("/{id}")
     public ResponseEntity getSourceDetail(@PathVariable Long id,
                                           @ApiIgnore @CurrentUser User user,
-                                          HttpServletRequest request) {
-        if (invalidId(id)) {
+                                          HttpServletRequest request)
+    {
+        if (invalidId(id))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid project id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -137,9 +232,11 @@ public class SourceController extends BaseController {
     public ResponseEntity createSource(@Valid @RequestBody SourceCreate source,
                                        @ApiIgnore BindingResult bindingResult,
                                        @ApiIgnore @CurrentUser User user,
-                                       HttpServletRequest request) {
+                                       HttpServletRequest request)
+    {
 
-        if (bindingResult.hasErrors()) {
+        if (bindingResult.hasErrors())
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -165,15 +262,18 @@ public class SourceController extends BaseController {
                                        @Valid @RequestBody SourceInfo source,
                                        @ApiIgnore BindingResult bindingResult,
                                        @ApiIgnore @CurrentUser User user,
-                                       HttpServletRequest request) {
+                                       HttpServletRequest request)
+    {
 
 
-        if (bindingResult.hasErrors()) {
+        if (bindingResult.hasErrors())
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
 
-        if (invalidId(id) || !id.equals(source.getId())) {
+        if (invalidId(id) || !id.equals(source.getId()))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid source id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -194,9 +294,11 @@ public class SourceController extends BaseController {
     @DeleteMapping("/{id}")
     public ResponseEntity deleteSource(@PathVariable Long id,
                                        @ApiIgnore @CurrentUser User user,
-                                       HttpServletRequest request) {
+                                       HttpServletRequest request)
+    {
 
-        if (invalidId(id)) {
+        if (invalidId(id))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid source id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -220,9 +322,11 @@ public class SourceController extends BaseController {
     public ResponseEntity testSource(@Valid @RequestBody SourceTest sourceTest,
                                      @ApiIgnore BindingResult bindingResult,
                                      @ApiIgnore @CurrentUser User user,
-                                     HttpServletRequest request) {
+                                     HttpServletRequest request)
+    {
 
-        if (bindingResult.hasErrors()) {
+        if (bindingResult.hasErrors())
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -245,7 +349,8 @@ public class SourceController extends BaseController {
     public ResponseEntity reconnect(@PathVariable Long id,
                                     @RequestBody DbBaseInfo dbBaseInfo,
                                     @ApiIgnore @CurrentUser User user,
-                                    HttpServletRequest request) {
+                                    HttpServletRequest request)
+    {
         sourceService.reconnect(id, dbBaseInfo, user);
         return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
     }
@@ -267,14 +372,17 @@ public class SourceController extends BaseController {
                                         @Valid @RequestBody UploadMeta uploadMeta,
                                         @ApiIgnore BindingResult bindingResult,
                                         @ApiIgnore @CurrentUser User user,
-                                        HttpServletRequest request) {
+                                        HttpServletRequest request)
+    {
 
-        if (invalidId(id)) {
+        if (invalidId(id))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid source id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
 
-        if (bindingResult.hasErrors()) {
+        if (bindingResult.hasErrors())
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -302,19 +410,23 @@ public class SourceController extends BaseController {
                                      @ApiIgnore BindingResult bindingResult,
                                      @RequestParam("file") MultipartFile file,
                                      @ApiIgnore @CurrentUser User user,
-                                     HttpServletRequest request) {
+                                     HttpServletRequest request)
+    {
 
-        if (invalidId(id)) {
+        if (invalidId(id))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid source id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
 
-        if (bindingResult.hasErrors()) {
+        if (bindingResult.hasErrors())
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
 
-        if (file.isEmpty() || StringUtils.isEmpty(file.getOriginalFilename())) {
+        if (file.isEmpty() || StringUtils.isEmpty(file.getOriginalFilename()))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Upload file can not be empty");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -336,8 +448,10 @@ public class SourceController extends BaseController {
     @GetMapping("/{id}/databases")
     public ResponseEntity getSourceDbs(@PathVariable Long id,
                                        @ApiIgnore @CurrentUser User user,
-                                       HttpServletRequest request) {
-        if (invalidId(id)) {
+                                       HttpServletRequest request)
+    {
+        if (invalidId(id))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid source id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -360,8 +474,10 @@ public class SourceController extends BaseController {
     public ResponseEntity getSourceTables(@PathVariable Long id,
                                           @RequestParam(name = "dbName") String dbName,
                                           @ApiIgnore @CurrentUser User user,
-                                          HttpServletRequest request) {
-        if (invalidId(id)) {
+                                          HttpServletRequest request)
+    {
+        if (invalidId(id))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid source id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -388,13 +504,16 @@ public class SourceController extends BaseController {
                                           @RequestParam(name = "dbName") String dbName,
                                           @RequestParam(name = "tableName") String tableName,
                                           @ApiIgnore @CurrentUser User user,
-                                          HttpServletRequest request) {
-        if (invalidId(id)) {
+                                          HttpServletRequest request)
+    {
+        if (invalidId(id))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid source id");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
 
-        if (StringUtils.isEmpty(tableName)) {
+        if (StringUtils.isEmpty(tableName))
+        {
             ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Table cannot be empty");
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
@@ -419,7 +538,8 @@ public class SourceController extends BaseController {
      */
     @ApiOperation(value = "get jdbc datasources")
     @GetMapping("/jdbc/datasources")
-    public ResponseEntity getJdbcDataSources(@ApiIgnore @CurrentUser User user, HttpServletRequest request) {
+    public ResponseEntity getJdbcDataSources(@ApiIgnore @CurrentUser User user, HttpServletRequest request)
+    {
         List<DatasourceType> list = sourceService.getDatasources();
         return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(list));
     }

+ 7 - 1
server/src/main/java/edp/davinci/core/inteceptor/AuthenticationInterceptor.java

@@ -99,7 +99,13 @@ public class AuthenticationInterceptor implements HandlerInterceptor
 
         // token 不为空
         if(StringUtils.isNotEmpty(token)){
-            JSONObject userinfoObject = (JSONObject) JSONObject.toJSON(userinfo);
+            JSONObject acessToken = (JSONObject) redisUtils.get(token);
+            if(StringUtils.isEmpty(acessToken.toString())){
+                response.setStatus(HttpCodeEnum.UNAUTHORIZED.getCode());
+                response.getWriter().print(ErrorMsg.ERR_LOAD_DATA_TOKEN);
+                return false;
+            }
+            JSONObject userinfoObject = (JSONObject) JSONObject.toJSON(acessToken);
             User user = userService.getByUsername(userinfoObject.getString("username"));
             if (null == user)
             {

+ 14 - 0
server/src/main/java/edp/davinci/dto/sourceDto/SourceTreeInfo.java

@@ -0,0 +1,14 @@
+package edp.davinci.dto.sourceDto;
+
+import edp.davinci.model.Source;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class SourceTreeInfo extends Source
+{
+   private List nodes = new ArrayList();
+
+}