Przeglądaj źródła

refactor: 整理包位置,security配置更新, Response返回方式更新

370774330@qq.com 5 lat temu
rodzic
commit
dd357d764e
48 zmienionych plików z 369 dodań i 175 usunięć
  1. 10 0
      common/pom.xml
  2. 5 0
      common/src/main/java/seecoder/devcloud/common/CommonAutoConfiguration.java
  3. 2 2
      common/src/main/java/seecoder/devcloud/common/exceptions/ServiceException.java
  4. 91 0
      common/src/main/java/seecoder/devcloud/common/util/JwtTokenUtil.java
  5. 1 1
      web/src/main/java/seecoder/devcloud/web/controller/TreeNodesController.java
  6. 1 1
      web/src/main/java/seecoder/devcloud/web/controller/gitlab/HookController.java
  7. 4 6
      web/src/main/java/seecoder/devcloud/web/controller/user/UserController.java
  8. 1 1
      web/src/main/java/seecoder/devcloud/web/dao/provider/TreeNodeProvider.java
  9. 1 1
      web/src/main/java/seecoder/devcloud/web/dao/tree/TreeNodeMapper.java
  10. 1 1
      web/src/main/java/seecoder/devcloud/web/dao/user/GroupMapper.java
  11. 2 3
      web/src/main/java/seecoder/devcloud/web/dao/user/GroupMemberMapper.java
  12. 1 1
      web/src/main/java/seecoder/devcloud/web/dao/user/UserMapper.java
  13. 6 4
      web/src/main/java/seecoder/devcloud/web/infrastructure/GlobalExceptionHandler.java
  14. 6 9
      web/src/main/java/seecoder/devcloud/web/infrastructure/config/WebSecurityConfig.java
  15. 29 0
      web/src/main/java/seecoder/devcloud/web/infrastructure/security/AuthController.java
  16. 39 0
      web/src/main/java/seecoder/devcloud/web/infrastructure/security/JwtAuthService.java
  17. 54 0
      web/src/main/java/seecoder/devcloud/web/infrastructure/security/JwtAuthenticationTokenFilter.java
  18. 18 0
      web/src/main/java/seecoder/devcloud/web/infrastructure/security/Sha256HexPasswordEncoder.java
  19. 2 0
      web/src/main/java/seecoder/devcloud/web/infrastructure/security/WebSecurityBean.java
  20. 1 1
      web/src/main/java/seecoder/devcloud/web/infrastructure/security/WebSecurityConstants.java
  21. 1 1
      web/src/main/java/seecoder/devcloud/web/model/enums/GroupType.java
  22. 1 1
      web/src/main/java/seecoder/devcloud/web/model/enums/NodeStateEnum.java
  23. 1 1
      web/src/main/java/seecoder/devcloud/web/model/enums/NodeTypeEnum.java
  24. 1 5
      web/src/main/java/seecoder/devcloud/web/model/enums/ResponseEnums.java
  25. 1 1
      web/src/main/java/seecoder/devcloud/web/model/enums/UserIdentity.java
  26. 3 5
      web/src/main/java/seecoder/devcloud/web/model/po/TreeNode.java
  27. 2 2
      web/src/main/java/seecoder/devcloud/web/model/po/user/Group.java
  28. 2 15
      web/src/main/java/seecoder/devcloud/web/model/po/user/User.java
  29. 1 1
      web/src/main/java/seecoder/devcloud/web/model/vo/GitWebHookVO.java
  30. 43 0
      web/src/main/java/seecoder/devcloud/web/model/vo/Response.java
  31. 1 1
      web/src/main/java/seecoder/devcloud/web/model/vo/user/ChangePasswordVO.java
  32. 2 2
      web/src/main/java/seecoder/devcloud/web/model/vo/user/CustomUserDetails.java
  33. 1 1
      web/src/main/java/seecoder/devcloud/web/model/vo/user/GroupDTO.java
  34. 2 2
      web/src/main/java/seecoder/devcloud/web/model/vo/user/GroupVO.java
  35. 3 3
      web/src/main/java/seecoder/devcloud/web/model/vo/user/InnerGroupVO.java
  36. 1 1
      web/src/main/java/seecoder/devcloud/web/model/vo/user/RegisterVO.java
  37. 2 2
      web/src/main/java/seecoder/devcloud/web/model/vo/user/UserDTO.java
  38. 3 3
      web/src/main/java/seecoder/devcloud/web/model/vo/user/UserVO.java
  39. 1 1
      web/src/main/java/seecoder/devcloud/web/service/TreeNodeService.java
  40. 1 1
      web/src/main/java/seecoder/devcloud/web/service/impl/tree/TreeNodeServiceImpl.java
  41. 4 4
      web/src/main/java/seecoder/devcloud/web/service/impl/user/GroupServiceImpl.java
  42. 5 5
      web/src/main/java/seecoder/devcloud/web/service/impl/user/UserServiceImpl.java
  43. 1 4
      web/src/main/java/seecoder/devcloud/web/service/user/GroupService.java
  44. 3 3
      web/src/main/java/seecoder/devcloud/web/service/user/UserService.java
  45. 0 70
      web/src/main/java/seecoder/devcloud/web/vo/Response.java
  46. 2 2
      web/src/main/resources/mybatis-config.xml
  47. 3 3
      web/src/test/java/seecoder/devcloud/web/dataMapper/TreeNodeMapperTest.java
  48. 3 4
      web/src/test/java/seecoder/devcloud/web/service/user/UserServiceTest.java

+ 10 - 0
common/pom.xml

@@ -39,11 +39,21 @@
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <optional>true</optional>
         </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.0</version>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.commons</groupId>

+ 5 - 0
common/src/main/java/seecoder/devcloud/common/CommonAutoConfiguration.java

@@ -2,6 +2,7 @@ package seecoder.devcloud.common;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import seecoder.devcloud.common.util.JwtTokenUtil;
 import seecoder.devcloud.common.util.SpringUtil;
 
 /**
@@ -17,4 +18,8 @@ public class CommonAutoConfiguration {
         return new SpringUtil();
     }
 
+    @Bean
+    JwtTokenUtil jwtTokenUtil(){
+        return new JwtTokenUtil();
+    }
 }

+ 2 - 2
common/src/main/java/seecoder/devcloud/common/exceptions/ServiceException.java

@@ -7,7 +7,7 @@ import org.springframework.http.HttpStatus;
 @Getter
 @ToString
 public class ServiceException extends RuntimeException {
-	private int error;
+	private int code;
 
 	public ServiceException() {
 		this(HttpStatus.INTERNAL_SERVER_ERROR.value(), HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
@@ -23,7 +23,7 @@ public class ServiceException extends RuntimeException {
 
 	public ServiceException(int error, String message) {
 		super(message);
-		this.error = error;
+		this.code = error;
 	}
 
 	private static String message(int error) {

+ 91 - 0
common/src/main/java/seecoder/devcloud/common/util/JwtTokenUtil.java

@@ -0,0 +1,91 @@
+package seecoder.devcloud.common.util;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+@ConfigurationProperties(prefix = "seecoder.jwt")
+@Component
+public class JwtTokenUtil {
+    private String secret;
+    private Long expiration;
+
+    public String generateToken(UserDetails userDetails) {
+        Map<String, Object> claims = new HashMap<>(2);
+        claims.put("sub", userDetails.getUsername());
+        claims.put("created", new Date());
+        return generateToken(claims);
+    }
+
+    public String getUsernameFromToken(String token) {
+        String username;
+        try {
+            Claims claims = getClaimsFromToken(token);
+            username = claims.getSubject();
+        } catch (Exception e) {
+            username = null;
+        }
+        return username;
+    }
+
+    public Boolean isTokenExpired(String token) {
+        try {
+            Claims claims = getClaimsFromToken(token);
+            Date expiration = claims.getExpiration();
+            return expiration.before(new Date());
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * 刷新令牌
+     *
+     * @param token 原令牌
+     * @return 新令牌
+     */
+    public String refreshToken(String token) {
+        String refreshedToken;
+        try {
+            Claims claims = getClaimsFromToken(token);
+            claims.put("created", new Date());
+            refreshedToken = generateToken(claims);
+        } catch (Exception e) {
+            refreshedToken = null;
+        }
+        return refreshedToken;
+    }
+
+    public Boolean validateToken(String token, UserDetails userDetails) {
+        String username = getUsernameFromToken(token);
+        return (username.equals(userDetails.getUsername()) && !isTokenExpired(token));
+    }
+
+    private String generateToken(Map<String, Object> claims) {
+        Date expirationDate = new Date(System.currentTimeMillis() + expiration);
+        return Jwts.builder().setClaims(claims)
+                .setExpiration(expirationDate)
+                .signWith(SignatureAlgorithm.HS512, secret)
+                .compact();
+    }
+
+    private Claims getClaimsFromToken(String token) {
+        Claims claims;
+        try {
+            claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
+        } catch (Exception e) {
+            claims = null;
+        }
+        return claims;
+    }
+
+}

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/controller/TreeNodesController.java

@@ -4,7 +4,7 @@ package seecoder.devcloud.web.controller;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
-import seecoder.devcloud.web.po.TreeNode;
+import seecoder.devcloud.web.model.po.TreeNode;
 import seecoder.devcloud.web.service.TreeNodeService;
 
 import java.util.List;

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/controller/gitlab/HookController.java

@@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import seecoder.devcloud.web.vo.GitWebHookVO;
+import seecoder.devcloud.web.model.vo.GitWebHookVO;
 
 /**
  * @author chenyz

+ 4 - 6
web/src/main/java/seecoder/devcloud/web/controller/user/UserController.java

@@ -1,15 +1,13 @@
 package seecoder.devcloud.web.controller.user;
 
-import jnr.ffi.annotations.In;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import seecoder.devcloud.web.service.user.UserService;
-import seecoder.devcloud.web.vo.Response;
-import seecoder.devcloud.web.vo.user.ChangePasswordVO;
-import seecoder.devcloud.web.vo.user.RegisterVO;
-import seecoder.devcloud.web.vo.user.UserVO;
+import seecoder.devcloud.web.model.vo.Response;
+import seecoder.devcloud.web.model.vo.user.ChangePasswordVO;
+import seecoder.devcloud.web.model.vo.user.RegisterVO;
+import seecoder.devcloud.web.model.vo.user.UserVO;
 
-import javax.validation.Validation;
 import javax.validation.constraints.Pattern;
 
 /**

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/dao/provider/TreeNodeProvider.java

@@ -1,7 +1,7 @@
 package seecoder.devcloud.web.dao.provider;
 
 import org.apache.ibatis.jdbc.SQL;
-import seecoder.devcloud.web.po.TreeNode;
+import seecoder.devcloud.web.model.po.TreeNode;
 
 public class TreeNodeProvider {
     public String updateTreeNode(TreeNode treeNode){

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/dao/tree/TreeNodeMapper.java

@@ -4,7 +4,7 @@ package seecoder.devcloud.web.dao.tree;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 import seecoder.devcloud.web.dao.provider.TreeNodeProvider;
-import seecoder.devcloud.web.po.TreeNode;
+import seecoder.devcloud.web.model.po.TreeNode;
 
 import java.util.List;
 

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/dao/user/GroupMapper.java

@@ -4,7 +4,7 @@ package seecoder.devcloud.web.dao.user;
 
 import org.apache.ibatis.annotations.*;
 import seecoder.devcloud.web.dao.GeneralInsertUpdateSqlProvider;
-import seecoder.devcloud.web.po.user.Group;
+import seecoder.devcloud.web.model.po.user.Group;
 
 /**
  * @author PuHong Weng

+ 2 - 3
web/src/main/java/seecoder/devcloud/web/dao/user/GroupMemberMapper.java

@@ -1,9 +1,8 @@
 package seecoder.devcloud.web.dao.user;
 
-import jnr.ffi.annotations.In;
 import org.apache.ibatis.annotations.*;
-import seecoder.devcloud.web.po.user.Group;
-import seecoder.devcloud.web.po.user.User;
+import seecoder.devcloud.web.model.po.user.Group;
+import seecoder.devcloud.web.model.po.user.User;
 
 import java.util.List;
 

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/dao/user/UserMapper.java

@@ -3,7 +3,7 @@ package seecoder.devcloud.web.dao.user;
 
 import org.apache.ibatis.annotations.*;
 import seecoder.devcloud.web.dao.GeneralInsertUpdateSqlProvider;
-import seecoder.devcloud.web.po.user.User;
+import seecoder.devcloud.web.model.po.user.User;
 
 
 @Mapper

+ 6 - 4
web/src/main/java/seecoder/devcloud/web/infrastructure/GlobalExceptionHandler.java

@@ -4,14 +4,15 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
+import seecoder.devcloud.common.exceptions.AccessDeniedException;
+import seecoder.devcloud.common.exceptions.ConflictException;
 import seecoder.devcloud.common.exceptions.ServiceException;
-import seecoder.devcloud.web.vo.Response;
+import seecoder.devcloud.web.model.vo.Response;
 
 /**
  * @author PuHong Weng
  * @date 2021/3/5
  * @description: 统一异常返回处理
- * todo 应为整个系统使用了学长的老API,是否有没捕捉的异常,待进一步验证
  */
 @ControllerAdvice
 @Slf4j
@@ -20,8 +21,9 @@ public class GlobalExceptionHandler {
     @ExceptionHandler(ServiceException.class)
     @ResponseBody
     public Response serviceExceptionHandler(ServiceException e){
-        log.error(e.getMessage(),e);
-        return Response.serverInternalError(e.getMessage());
+        log.error("Error: ",e);
+        return Response.buildFailure(e.getCode(),e.getMessage());
     }
 
+
 }

+ 6 - 9
web/src/main/java/seecoder/devcloud/web/infrastructure/config/WebSecurityConfig.java

@@ -47,18 +47,12 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
     private PasswordEncoder passwordEncoder;
 
 
-    @Override
-    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
-        auth.userDetailsService(userDetailsService)
-                .passwordEncoder(passwordEncoder);
-    }
 
     @Override
     protected void configure(HttpSecurity http) throws Exception {
         http
 
                 .authorizeRequests()
-
                 //跨域的Options请求进行放行
                 .requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
                 //todo 具体角色权限配置等开发完成之后再配, 这里先配为默认所有权限
@@ -71,9 +65,12 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .and()
                 .httpBasic();
 
-        //csrf保护,postman本地测试的时候要么disable,要么带上token参数
-        //todo spring security
-        http.csrf();
+
+        //跨域
+        http.cors();
+
+        //改用jwt
+        http.csrf().disable();
     }
 
 

+ 29 - 0
web/src/main/java/seecoder/devcloud/web/infrastructure/security/AuthController.java

@@ -0,0 +1,29 @@
+package seecoder.devcloud.web.infrastructure.security;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import seecoder.devcloud.web.model.vo.Response;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/auth")
+public class AuthController {
+
+    private final JwtAuthService jwtAuthService;
+
+    @Autowired
+    public AuthController(JwtAuthService jwtAuthService) {
+        this.jwtAuthService = jwtAuthService;
+    }
+
+    @PostMapping("")
+    public Response login(@RequestBody Map<String, String> map) {
+        String username = map.get("username");
+        String password = map.get("password");
+        return Response.ok(jwtAuthService.login(username, password));
+    }
+}

+ 39 - 0
web/src/main/java/seecoder/devcloud/web/infrastructure/security/JwtAuthService.java

@@ -0,0 +1,39 @@
+package seecoder.devcloud.web.infrastructure.security;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.stereotype.Service;
+import seecoder.devcloud.common.util.JwtTokenUtil;
+
+@Service
+public class JwtAuthService {
+
+    private final AuthenticationManager authenticationManager;
+
+    private final UserDetailsService userDetailsService;
+
+    private final JwtTokenUtil jwtTokenUtil;
+
+    @Autowired
+    public JwtAuthService(AuthenticationManager authenticationManager, @Qualifier("userServiceImpl") UserDetailsService userDetailsService, JwtTokenUtil jwtTokenUtil) {
+        this.authenticationManager = authenticationManager;
+        this.userDetailsService = userDetailsService;
+        this.jwtTokenUtil = jwtTokenUtil;
+    }
+
+    public String login(String username, String password) {
+        UsernamePasswordAuthenticationToken upToken =
+                new UsernamePasswordAuthenticationToken(username, password);
+        Authentication authentication = authenticationManager.authenticate(upToken);
+        SecurityContextHolder.getContext().setAuthentication(authentication);
+        UserDetails userDetails = userDetailsService.loadUserByUsername(username);
+        return jwtTokenUtil.generateToken(userDetails);
+    }
+
+}

+ 54 - 0
web/src/main/java/seecoder/devcloud/web/infrastructure/security/JwtAuthenticationTokenFilter.java

@@ -0,0 +1,54 @@
+package seecoder.devcloud.web.infrastructure.security;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+import seecoder.devcloud.common.util.JwtTokenUtil;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
+
+    private final UserDetailsService userDetailsService;
+
+    private final JwtTokenUtil jwtTokenUtil;
+
+    @Autowired
+    public JwtAuthenticationTokenFilter(JwtTokenUtil jwtTokenUtil, @Qualifier("userServiceImpl") UserDetailsService userDetailsService) {
+        this.jwtTokenUtil = jwtTokenUtil;
+        this.userDetailsService = userDetailsService;
+    }
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
+        String authHeader = httpServletRequest.getHeader("Authorization");
+        if (StringUtils.isNotEmpty(authHeader)) {
+            String username = jwtTokenUtil.getUsernameFromToken(authHeader);
+            if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
+                UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
+                if (jwtTokenUtil.validateToken(authHeader, userDetails)) {
+                    //加载用户、角色、权限信息,Spring Security根据这些信息判断接口的访问权限
+                    UsernamePasswordAuthenticationToken authentication
+                            = new UsernamePasswordAuthenticationToken(userDetails, null,
+                            userDetails.getAuthorities());
+                    authentication.setDetails(new WebAuthenticationDetailsSource()
+                            .buildDetails(httpServletRequest));
+                    SecurityContextHolder.getContext().setAuthentication(authentication);
+                }
+            }
+        }
+        filterChain.doFilter(httpServletRequest, httpServletResponse);
+    }
+}

+ 18 - 0
web/src/main/java/seecoder/devcloud/web/infrastructure/security/Sha256HexPasswordEncoder.java

@@ -0,0 +1,18 @@
+package seecoder.devcloud.web.infrastructure.security;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Sha256HexPasswordEncoder implements PasswordEncoder {
+    @Override
+    public String encode(CharSequence rawPassword) {
+        return DigestUtils.sha256Hex(rawPassword != null ? rawPassword.toString() : StringUtils.EMPTY);
+    }
+
+    @Override
+    public boolean matches(CharSequence rawPassword, String encodedPassword) {
+        return StringUtils.equals(encode(rawPassword), encodedPassword);
+    }
+}

+ 2 - 0
web/src/main/java/seecoder/devcloud/web/infrastructure/security/WebSecurityBean.java

@@ -18,5 +18,7 @@ public class WebSecurityBean {
     public PasswordEncoder passwordEncoder(){
         return new BCryptPasswordEncoder();
     }
+
+
 }
 

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/infrastructure/security/WebSecurityConstants.java

@@ -2,7 +2,7 @@ package seecoder.devcloud.web.infrastructure.security;
 
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import seecoder.devcloud.web.enums.UserIdentity;
+import seecoder.devcloud.web.model.enums.UserIdentity;
 
 import java.util.HashMap;
 import java.util.Map;

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/enums/GroupType.java → web/src/main/java/seecoder/devcloud/web/model/enums/GroupType.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.enums;
+package seecoder.devcloud.web.model.enums;
 
 /**
  * Description:

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/enums/NodeStateEnum.java → web/src/main/java/seecoder/devcloud/web/model/enums/NodeStateEnum.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.enums;
+package seecoder.devcloud.web.model.enums;
 
 public enum NodeStateEnum {
     PROCESSING("0:进行中"),

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/enums/NodeTypeEnum.java → web/src/main/java/seecoder/devcloud/web/model/enums/NodeTypeEnum.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.enums;
+package seecoder.devcloud.web.model.enums;
 
 public enum NodeTypeEnum {
     REQUIREMENT("0:需求"),

+ 1 - 5
web/src/main/java/seecoder/devcloud/web/enums/ResponseEnums.java → web/src/main/java/seecoder/devcloud/web/model/enums/ResponseEnums.java

@@ -1,8 +1,4 @@
-package seecoder.devcloud.web.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.Setter;
+package seecoder.devcloud.web.model.enums;
 
 /**
  * @author PuHong Weng

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/enums/UserIdentity.java → web/src/main/java/seecoder/devcloud/web/model/enums/UserIdentity.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.enums;
+package seecoder.devcloud.web.model.enums;
 
 public enum UserIdentity {
 	/**

+ 3 - 5
web/src/main/java/seecoder/devcloud/web/po/TreeNode.java → web/src/main/java/seecoder/devcloud/web/model/po/TreeNode.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.po;
+package seecoder.devcloud.web.model.po;
 
 
 
@@ -6,10 +6,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
-import seecoder.devcloud.web.enums.NodeStateEnum;
-import seecoder.devcloud.web.enums.NodeTypeEnum;
-
-import java.util.Date;
+import seecoder.devcloud.web.model.enums.NodeStateEnum;
+import seecoder.devcloud.web.model.enums.NodeTypeEnum;
 
 @Data
 @AllArgsConstructor

+ 2 - 2
web/src/main/java/seecoder/devcloud/web/po/user/Group.java → web/src/main/java/seecoder/devcloud/web/model/po/user/Group.java

@@ -1,11 +1,11 @@
-package seecoder.devcloud.web.po.user;
+package seecoder.devcloud.web.model.po.user;
 
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import seecoder.devcloud.web.enums.GroupType;
+import seecoder.devcloud.web.model.enums.GroupType;
 
 import java.util.List;
 

+ 2 - 15
web/src/main/java/seecoder/devcloud/web/po/user/User.java → web/src/main/java/seecoder/devcloud/web/model/po/user/User.java

@@ -1,28 +1,15 @@
-package seecoder.devcloud.web.po.user;
+package seecoder.devcloud.web.model.po.user;
 
 
-import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.type.Alias;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
-import seecoder.devcloud.web.enums.UserIdentity;
+import seecoder.devcloud.web.model.enums.UserIdentity;
 import seecoder.devcloud.web.infrastructure.security.WebSecurityConstants;
 
-import javax.persistence.*;
 import java.sql.Timestamp;
-import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
 
 @Data
 public class User implements UserDetails {

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/vo/GitWebHookVO.java → web/src/main/java/seecoder/devcloud/web/model/vo/GitWebHookVO.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.vo;
+package seecoder.devcloud.web.model.vo;
 
 import lombok.Data;
 import lombok.NoArgsConstructor;

+ 43 - 0
web/src/main/java/seecoder/devcloud/web/model/vo/Response.java

@@ -0,0 +1,43 @@
+package seecoder.devcloud.web.model.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import seecoder.devcloud.common.exceptions.ServiceException;
+
+import java.io.Serializable;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/2/1
+ * @description:
+ */
+@Data
+public class Response<T> implements Serializable {
+
+    private Integer code;
+
+    private String msg;
+
+    private T data;
+
+    public Response(Integer code, String msg, T data) {
+        this.code = code;
+        this.msg = msg;
+        this.data = data;
+    }
+
+
+    public static Response buildSuccess() {
+        return new Response(200, "", null);
+    }
+
+
+    public static <T> Response<T> buildSuccess(T result) {
+        return new Response<T>(200, "", result);
+    }
+
+    public static  Response buildFailure(Integer code, String message) {
+        return new Response(code,message, null);
+    }
+}

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/vo/user/ChangePasswordVO.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/ChangePasswordVO.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.vo.user;
+package seecoder.devcloud.web.model.vo.user;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;

+ 2 - 2
web/src/main/java/seecoder/devcloud/web/vo/user/CustomUserDetails.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/CustomUserDetails.java

@@ -13,8 +13,8 @@
 //import java.util.Collections;
 //import java.util.Set;
 //
-//import static seecoder.devcloud.web.enums.UserIdentity.STUDENT;
-//import static seecoder.devcloud.web.enums.UserIdentity.TEACHER;
+//import static seecoder.devcloud.web.model.enums.UserIdentity.STUDENT;
+//import static seecoder.devcloud.web.model.enums.UserIdentity.TEACHER;
 //import static seecoder.devcloud.web.infrastructure.security.WebSecurityConstants.*;
 //
 //

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/vo/user/GroupDTO.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/GroupDTO.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.vo.user;
+package seecoder.devcloud.web.model.vo.user;
 
 import lombok.Data;
 import org.springframework.web.bind.annotation.PostMapping;

+ 2 - 2
web/src/main/java/seecoder/devcloud/web/vo/user/GroupVO.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/GroupVO.java

@@ -1,9 +1,9 @@
-package seecoder.devcloud.web.vo.user;
+package seecoder.devcloud.web.model.vo.user;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import seecoder.devcloud.web.po.user.Group;
+import seecoder.devcloud.web.model.po.user.Group;
 
 import java.util.List;
 import java.util.stream.Collectors;

+ 3 - 3
web/src/main/java/seecoder/devcloud/web/vo/user/InnerGroupVO.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/InnerGroupVO.java

@@ -1,11 +1,11 @@
-package seecoder.devcloud.web.vo.user;
+package seecoder.devcloud.web.model.vo.user;
 
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import seecoder.devcloud.web.po.user.Group;
-import seecoder.devcloud.web.po.user.User;
+import seecoder.devcloud.web.model.po.user.Group;
+import seecoder.devcloud.web.model.po.user.User;
 
 import java.util.List;
 

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/vo/user/RegisterVO.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/RegisterVO.java

@@ -1,4 +1,4 @@
-package seecoder.devcloud.web.vo.user;
+package seecoder.devcloud.web.model.vo.user;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.AllArgsConstructor;

+ 2 - 2
web/src/main/java/seecoder/devcloud/web/vo/user/UserDTO.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/UserDTO.java

@@ -1,9 +1,9 @@
-package seecoder.devcloud.web.vo.user;
+package seecoder.devcloud.web.model.vo.user;
 
 import lombok.Data;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
-import seecoder.devcloud.web.enums.UserIdentity;
+import seecoder.devcloud.web.model.enums.UserIdentity;
 
 import javax.validation.constraints.Email;
 import javax.validation.constraints.NotNull;

+ 3 - 3
web/src/main/java/seecoder/devcloud/web/vo/user/UserVO.java → web/src/main/java/seecoder/devcloud/web/model/vo/user/UserVO.java

@@ -1,12 +1,12 @@
-package seecoder.devcloud.web.vo.user;
+package seecoder.devcloud.web.model.vo.user;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
-import seecoder.devcloud.web.enums.UserIdentity;
-import seecoder.devcloud.web.po.user.User;
+import seecoder.devcloud.web.model.enums.UserIdentity;
+import seecoder.devcloud.web.model.po.user.User;
 
 import java.sql.Timestamp;
 

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/service/TreeNodeService.java

@@ -2,7 +2,7 @@ package seecoder.devcloud.web.service;
 
 
 
-import seecoder.devcloud.web.po.TreeNode;
+import seecoder.devcloud.web.model.po.TreeNode;
 
 import java.util.List;
 

+ 1 - 1
web/src/main/java/seecoder/devcloud/web/service/impl/tree/TreeNodeServiceImpl.java

@@ -4,7 +4,7 @@ package seecoder.devcloud.web.service.impl.tree;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import seecoder.devcloud.web.dao.tree.TreeNodeMapper;
-import seecoder.devcloud.web.po.TreeNode;
+import seecoder.devcloud.web.model.po.TreeNode;
 import seecoder.devcloud.web.service.TreeNodeService;
 
 import java.util.List;

+ 4 - 4
web/src/main/java/seecoder/devcloud/web/service/impl/user/GroupServiceImpl.java

@@ -13,11 +13,11 @@ import seecoder.devcloud.common.exceptions.ServiceException;
 import seecoder.devcloud.web.dao.user.GroupMapper;
 import seecoder.devcloud.web.dao.user.GroupMemberMapper;
 import seecoder.devcloud.web.dao.user.UserMapper;
-import seecoder.devcloud.web.enums.GroupType;
-import seecoder.devcloud.web.po.user.Group;
-import seecoder.devcloud.web.po.user.User;
+import seecoder.devcloud.web.model.enums.GroupType;
+import seecoder.devcloud.web.model.po.user.Group;
+import seecoder.devcloud.web.model.po.user.User;
 import seecoder.devcloud.web.service.user.GroupService;
-import seecoder.devcloud.web.vo.user.GroupVO;
+import seecoder.devcloud.web.model.vo.user.GroupVO;
 
 import java.util.ArrayList;
 import java.util.List;

+ 5 - 5
web/src/main/java/seecoder/devcloud/web/service/impl/user/UserServiceImpl.java

@@ -20,12 +20,12 @@ import seecoder.devcloud.common.exceptions.InvalidRequestException;
 import seecoder.devcloud.common.exceptions.ServiceException;
 import seecoder.devcloud.common.util.ToolKit;
 import seecoder.devcloud.web.dao.user.UserMapper;
-import seecoder.devcloud.web.vo.user.ChangePasswordVO;
-import seecoder.devcloud.web.vo.user.RegisterVO;
+import seecoder.devcloud.web.model.vo.user.ChangePasswordVO;
+import seecoder.devcloud.web.model.vo.user.RegisterVO;
 
-import seecoder.devcloud.web.enums.UserIdentity;
-import seecoder.devcloud.web.po.user.User;
-import seecoder.devcloud.web.vo.user.UserVO;
+import seecoder.devcloud.web.model.enums.UserIdentity;
+import seecoder.devcloud.web.model.po.user.User;
+import seecoder.devcloud.web.model.vo.user.UserVO;
 import seecoder.devcloud.web.service.user.MailService;
 import seecoder.devcloud.web.service.user.UserService;
 

+ 1 - 4
web/src/main/java/seecoder/devcloud/web/service/user/GroupService.java

@@ -5,10 +5,7 @@ package seecoder.devcloud.web.service.user;
 import org.springframework.stereotype.Service;
 import seecoder.devcloud.common.exceptions.EntityNotFoundException;
 import seecoder.devcloud.common.exceptions.ServiceException;
-import seecoder.devcloud.web.vo.user.GroupVO;
-import seecoder.devcloud.web.vo.user.InnerGroupVO;
-
-import java.util.List;
+import seecoder.devcloud.web.model.vo.user.GroupVO;
 
 /**
  * @InterfaceName GroupService

+ 3 - 3
web/src/main/java/seecoder/devcloud/web/service/user/UserService.java

@@ -3,9 +3,9 @@ package seecoder.devcloud.web.service.user;
 
 import seecoder.devcloud.common.exceptions.ServiceException;
 
-import seecoder.devcloud.web.vo.user.ChangePasswordVO;
-import seecoder.devcloud.web.vo.user.RegisterVO;
-import seecoder.devcloud.web.vo.user.UserVO;
+import seecoder.devcloud.web.model.vo.user.ChangePasswordVO;
+import seecoder.devcloud.web.model.vo.user.RegisterVO;
+import seecoder.devcloud.web.model.vo.user.UserVO;
 
 public interface UserService {
 

+ 0 - 70
web/src/main/java/seecoder/devcloud/web/vo/Response.java

@@ -1,70 +0,0 @@
-package seecoder.devcloud.web.vo;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import seecoder.devcloud.web.enums.ResponseEnums;
-
-import java.io.Serializable;
-
-/**
- * @author PuHong Weng
- * @date 2021/2/1
- * @description:
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class Response<T> implements Serializable {
-
-    private String code;
-
-    private String msg;
-
-    private T data;
-
-    public Response(String code, String msg) {
-        this.code = code;
-        this.msg = msg;
-    }
-
-    public Response(ResponseEnums responseEnums) {
-        this.code = responseEnums.getCode();
-        this.msg = responseEnums.getMsg();
-    }
-
-    public Response(ResponseEnums responseEnums, T data) {
-        this.code = responseEnums.getCode();
-        this.msg = responseEnums.getMsg();
-        this.data = data;
-    }
-
-    public static Response ok() {
-        return new Response(ResponseEnums.OK);
-    }
-
-    public static <T> Response<T> ok(T data) {
-        return new Response<T>(ResponseEnums.OK,data);
-    }
-
-    public static Response notFound(String message) {
-        return new Response(ResponseEnums.NOT_FOUND, message);
-    }
-
-    public static Response badRequest(String message) {
-        return new Response(ResponseEnums.BAD_REQUEST, message);
-    }
-
-    public static Response forbidden(String message) {
-        return new Response(ResponseEnums.FORBIDDEN, message);
-    }
-
-    public static Response unauthorized(String message) {
-        return new Response(ResponseEnums.UNAUTHORIZED, message);
-    }
-
-    public static Response serverInternalError(String message) {
-        return new Response(ResponseEnums.SERVER_INTERNAL_ERROR, message);
-    }
-
-}

+ 2 - 2
web/src/main/resources/mybatis-config.xml

@@ -3,7 +3,7 @@
 <configuration>
 
     <typeHandlers>
-        <!--<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="seecoder.devcloud.web.enums.Type"/>-->
-        <!--<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="seecoder.devcloud.web.enums.State"/>-->
+        <!--<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="seecoder.devcloud.web.model.enums.Type"/>-->
+        <!--<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="seecoder.devcloud.web.model.enums.State"/>-->
     </typeHandlers>
 </configuration>

+ 3 - 3
web/src/test/java/seecoder/devcloud/web/dataMapper/TreeNodeMapperTest.java

@@ -7,9 +7,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
 import org.springframework.test.context.junit4.SpringRunner;
 import seecoder.devcloud.web.dao.tree.TreeNodeMapper;
-import seecoder.devcloud.web.enums.NodeStateEnum;
-import seecoder.devcloud.web.enums.NodeTypeEnum;
-import seecoder.devcloud.web.po.TreeNode;
+import seecoder.devcloud.web.model.enums.NodeStateEnum;
+import seecoder.devcloud.web.model.enums.NodeTypeEnum;
+import seecoder.devcloud.web.model.po.TreeNode;
 
 import java.util.List;
 

+ 3 - 4
web/src/test/java/seecoder/devcloud/web/service/user/UserServiceTest.java

@@ -9,13 +9,12 @@ import org.junit.runner.RunWith;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.ComponentScan;
 import org.springframework.test.context.junit4.SpringRunner;
 import seecoder.devcloud.api.ApplicationProperties;
 import seecoder.devcloud.common.exceptions.ServiceException;
-import seecoder.devcloud.web.vo.user.ChangePasswordVO;
-import seecoder.devcloud.web.vo.user.RegisterVO;
-import seecoder.devcloud.web.vo.user.UserVO;
+import seecoder.devcloud.web.model.vo.user.ChangePasswordVO;
+import seecoder.devcloud.web.model.vo.user.RegisterVO;
+import seecoder.devcloud.web.model.vo.user.UserVO;
 
 import java.util.stream.Collectors;