Browse Source

feat: 改成jwt方式解析登录

ChenSiTong 6 years ago
parent
commit
2d5788caf2
44 changed files with 939 additions and 825 deletions
  1. 5 0
      pom.xml
  2. 15 0
      src/main/java/nju/seec/helper/api/dataanalysis/EventApi.java
  3. 2 2
      src/main/java/nju/seec/helper/aspect/auth/Auth.java
  4. 71 11
      src/main/java/nju/seec/helper/aspect/auth/AuthAspect.java
  5. 2 2
      src/main/java/nju/seec/helper/aspect/auth/LoginUser.java
  6. 88 88
      src/main/java/nju/seec/helper/controller/AdminController.java
  7. 43 43
      src/main/java/nju/seec/helper/controller/CodeController.java
  8. 9 9
      src/main/java/nju/seec/helper/controller/CommentController.java
  9. 10 10
      src/main/java/nju/seec/helper/controller/CourseController.java
  10. 5 5
      src/main/java/nju/seec/helper/controller/CourseFileController.java
  11. 5 5
      src/main/java/nju/seec/helper/controller/MessageController.java
  12. 6 6
      src/main/java/nju/seec/helper/controller/NoticeController.java
  13. 10 10
      src/main/java/nju/seec/helper/controller/QuestionController.java
  14. 13 13
      src/main/java/nju/seec/helper/controller/QuizController.java
  15. 3 3
      src/main/java/nju/seec/helper/controller/ReplyController.java
  16. 10 10
      src/main/java/nju/seec/helper/controller/SlideController.java
  17. 75 88
      src/main/java/nju/seec/helper/controller/UserController.java
  18. 38 22
      src/main/java/nju/seec/helper/dao/UserDAO.java
  19. 2 2
      src/main/java/nju/seec/helper/dto/user/UserDTO.java
  20. 12 10
      src/main/java/nju/seec/helper/entity/User.java
  21. 1 1
      src/main/java/nju/seec/helper/enums/ExceptionType.java
  22. 20 0
      src/main/java/nju/seec/helper/enums/UserRole.java
  23. 8 8
      src/main/java/nju/seec/helper/enums/UserState.java
  24. 0 9
      src/main/java/nju/seec/helper/enums/UserType.java
  25. 58 58
      src/main/java/nju/seec/helper/service/AdminService.java
  26. 20 20
      src/main/java/nju/seec/helper/service/CodeService.java
  27. 42 25
      src/main/java/nju/seec/helper/service/UserService.java
  28. 86 86
      src/main/java/nju/seec/helper/service/impl/AdminServiceImpl.java
  29. 48 48
      src/main/java/nju/seec/helper/service/impl/CodeServiceImpl.java
  30. 2 2
      src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java
  31. 2 2
      src/main/java/nju/seec/helper/service/impl/QuestionServiceImpl.java
  32. 1 1
      src/main/java/nju/seec/helper/service/impl/QuizServiceImpl.java
  33. 1 1
      src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java
  34. 88 82
      src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java
  35. 3 3
      src/main/java/nju/seec/helper/util/Consts.java
  36. 32 32
      src/main/java/nju/seec/helper/util/MailUtils.java
  37. 65 65
      src/main/java/nju/seec/helper/util/SmsUtils.java
  38. 19 19
      src/main/java/nju/seec/helper/vo/AdminVO.java
  39. 3 3
      src/main/java/nju/seec/helper/vo/CommentVO.java
  40. 5 6
      src/main/java/nju/seec/helper/vo/UserVO.java
  41. 2 0
      src/main/resources/application-deploy.yml
  42. 2 0
      src/main/resources/application-dev.yml
  43. 3 3
      src/main/resources/application.yml
  44. 4 12
      src/main/resources/update.sql

+ 5 - 0
pom.xml

@@ -135,6 +135,11 @@
             <artifactId>hutool-all</artifactId>
             <artifactId>hutool-all</artifactId>
             <version>5.2.5</version>
             <version>5.2.5</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.10.2</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 15 - 0
src/main/java/nju/seec/helper/api/dataanalysis/EventApi.java

@@ -0,0 +1,15 @@
+package nju.seec.helper.api.dataanalysis;
+
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author cst
+ */
+@Component
+public class EventApi {
+    @Async
+    public void reportEvent() {
+
+    }
+}

+ 2 - 2
src/main/java/nju/seec/helper/aspect/auth/Auth.java

@@ -1,6 +1,6 @@
 package nju.seec.helper.aspect.auth;
 package nju.seec.helper.aspect.auth;
 
 
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 
 
 import java.lang.annotation.*;
 import java.lang.annotation.*;
 
 
@@ -11,7 +11,7 @@ import java.lang.annotation.*;
 @Retention(RetentionPolicy.RUNTIME)
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Documented
 public @interface Auth {
 public @interface Auth {
-    UserType[] roles() default {};
+    UserRole[] roles() default {};
 
 
     String message() default "";
     String message() default "";
 }
 }

+ 71 - 11
src/main/java/nju/seec/helper/aspect/auth/AuthAspect.java

@@ -1,19 +1,30 @@
 package nju.seec.helper.aspect.auth;
 package nju.seec.helper.aspect.auth;
 
 
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import lombok.Data;
+import nju.seec.helper.entity.User;
 import nju.seec.helper.enums.ExceptionType;
 import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.exception.HelperException;
-import nju.seec.helper.util.Consts;
+import nju.seec.helper.service.UserService;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Before;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 
-import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpServletRequest;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.Objects;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -22,20 +33,23 @@ import java.util.stream.Collectors;
 @Aspect
 @Aspect
 @Component
 @Component
 public class AuthAspect {
 public class AuthAspect {
+    @Value("${jwt.secret}")
+    private String jwtSecret;
+
+    private final UserService userService;
+
+    public AuthAspect(UserService userService) {
+        this.userService = userService;
+    }
+
     @Before("execution(public * nju.seec.helper.controller.*.*(..)) && @annotation(auth)")
     @Before("execution(public * nju.seec.helper.controller.*.*(..)) && @annotation(auth)")
     public void authCheck(JoinPoint joinPoint, Auth auth) {
     public void authCheck(JoinPoint joinPoint, Auth auth) {
-        HttpSession session =
-                ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
-                        .getRequest()
-                        .getSession();
+        User user = getUser();
 
 
-        LoginUser user = (LoginUser) session.getAttribute(Consts.SESSION_USER_NAME);
-        if (user == null) {
-            throw HelperException.of(ExceptionType.NOT_LOGIN, "您未登录");
-        } else if (!Arrays
+        if (!Arrays
                 .stream(auth.roles())
                 .stream(auth.roles())
                 .collect(Collectors.toSet())
                 .collect(Collectors.toSet())
-                .contains(user.getType())) {
+                .contains(user.getRole())) {
             throw HelperException.of(ExceptionType.FORBIDDEN, String.format("您暂时无法%s,请重新登录", auth.message()));
             throw HelperException.of(ExceptionType.FORBIDDEN, String.format("您暂时无法%s,请重新登录", auth.message()));
         }
         }
 
 
@@ -47,4 +61,50 @@ public class AuthAspect {
             }
             }
         }
         }
     }
     }
+
+    private User getUser() {
+        HttpServletRequest httpServletRequest =
+                ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
+                        .getRequest();
+
+        String token = Optional.ofNullable(httpServletRequest.getHeader("Authorization"))
+                .orElseThrow(() -> HelperException.of(ExceptionType.UNAUTHORIZED, "缺少Token"));
+
+        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(jwtSecret)).build();
+
+        DecodedJWT decodedJWT;
+
+        try {
+            decodedJWT = jwtVerifier.verify(token);
+        } catch (JWTVerificationException e) {
+            throw HelperException.of(ExceptionType.UNAUTHORIZED, "无效Token");
+        }
+
+        boolean isExpired = JWT.decode(token).getExpiresAt().before(new Date());
+
+        if (isExpired) {
+            throw HelperException.of(ExceptionType.UNAUTHORIZED, "Token已过期");
+        }
+
+        UserInfo userInfo = decodedJWT.getClaim("user_info").as(UserInfo.class);
+
+        User user = userService.getUserByPhoneOrPid(userInfo.phone, userInfo.id).orElse(new User());
+
+        user.setName(userInfo.name)
+                .setEmail(userInfo.email)
+                .setRole(userInfo.role)
+                .setPhone(userInfo.phone)
+                .setPid(userInfo.id);
+
+        return userService.createOrUpdateUser(user);
+    }
+
+    @Data
+    private static class UserInfo {
+        private Long id;
+        private String phone;
+        private String email;
+        private String name;
+        private UserRole role;
+    }
 }
 }

+ 2 - 2
src/main/java/nju/seec/helper/aspect/auth/LoginUser.java

@@ -2,7 +2,7 @@ package nju.seec.helper.aspect.auth;
 
 
 import lombok.Data;
 import lombok.Data;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 
 
 /**
 /**
  * @author cst
  * @author cst
@@ -11,5 +11,5 @@ import nju.seec.helper.enums.UserType;
 @Accessors(chain = true)
 @Accessors(chain = true)
 public class LoginUser {
 public class LoginUser {
     private Long id;
     private Long id;
-    private UserType type;
+    private UserRole role;
 }
 }

+ 88 - 88
src/main/java/nju/seec/helper/controller/AdminController.java

@@ -1,88 +1,88 @@
-package nju.seec.helper.controller;
-
-import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.aspect.auth.LoginUser;
-import nju.seec.helper.controller.response.PageResponse;
-import nju.seec.helper.dto.common.LoginDTO;
-import nju.seec.helper.enums.UserState;
-import nju.seec.helper.enums.UserType;
-import nju.seec.helper.service.AdminService;
-import nju.seec.helper.util.Consts;
-import nju.seec.helper.vo.AdminVO;
-import nju.seec.helper.vo.UserVO;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.web.PageableDefault;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpSession;
-
-/**
- * 管理员
- *
- * @author cst
- */
-@RestController
-@RequestMapping("/api/admin")
-public class AdminController {
-    private final AdminService adminService;
-
-    public AdminController(AdminService adminService) {
-        this.adminService = adminService;
-    }
-
-    /**
-     * 管理员登录
-     */
-    @PostMapping("/login")
-    public AdminVO login(@Validated @RequestBody LoginDTO loginDTO, HttpSession session) {
-        AdminVO adminVO = adminService.getAdminByUsernameAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
-
-        LoginUser user = new LoginUser()
-                .setId(adminVO.getId())
-                .setType(UserType.ADMIN);
-
-        session.setAttribute(Consts.SESSION_USER_NAME, user);
-        // 30分钟有效期
-        session.setMaxInactiveInterval(30 * 60);
-        return adminVO;
-    }
-
-    /**
-     * 获取注册教师列表
-     */
-    @Auth(roles = UserType.ADMIN, message = "获取注册教师列表")
-    @GetMapping("/user")
-    public PageResponse<UserVO> getUsers(LoginUser admin, UserType type, UserState state,
-                                         @RequestParam(required = false, defaultValue = "") String key,
-                                         @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
-        return PageResponse.of(adminService.getUsers(type, state, key, pageable));
-    }
-
-    /**
-     * 审核通过用户
-     */
-    @Auth(roles = UserType.ADMIN, message = "审核通过用户")
-    @PutMapping("/user/{userId}/pass")
-    public void passUser(LoginUser admin, @PathVariable Long userId) {
-        adminService.passUser(admin, userId);
-    }
-
-    /**
-     * 封禁用户
-     */
-    @Auth(roles = UserType.ADMIN, message = "封禁用户")
-    @PutMapping("/user/{userId}/lock")
-    public void lockUser(LoginUser admin, @PathVariable Long userId) {
-        adminService.lockUser(admin, userId);
-    }
-
-    /**
-     * 解封用户
-     */
-    @Auth(roles = UserType.ADMIN, message = "解封用户")
-    @PutMapping("/user/{userId}/unlock")
-    public void unlockUser(LoginUser admin, @PathVariable Long userId) {
-        adminService.unlockUser(admin, userId);
-    }
-}
+//package nju.seec.helper.controller;
+//
+//import nju.seec.helper.aspect.auth.Auth;
+//import nju.seec.helper.aspect.auth.LoginUser;
+//import nju.seec.helper.controller.response.PageResponse;
+//import nju.seec.helper.dto.common.LoginDTO;
+//import nju.seec.helper.enums.UserState;
+//import nju.seec.helper.enums.UserRole;
+//import nju.seec.helper.service.AdminService;
+//import nju.seec.helper.util.Consts;
+//import nju.seec.helper.vo.AdminVO;
+//import nju.seec.helper.vo.UserVO;
+//import org.springframework.data.domain.Pageable;
+//import org.springframework.data.web.PageableDefault;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.servlet.http.HttpSession;
+//
+///**
+// * 管理员
+// *
+// * @author cst
+// */
+//@RestController
+//@RequestMapping("/api/admin")
+//public class AdminController {
+//    private final AdminService adminService;
+//
+//    public AdminController(AdminService adminService) {
+//        this.adminService = adminService;
+//    }
+//
+//    /**
+//     * 管理员登录
+//     */
+//    @PostMapping("/login")
+//    public AdminVO login(@Validated @RequestBody LoginDTO loginDTO, HttpSession session) {
+//        AdminVO adminVO = adminService.getAdminByUsernameAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
+//
+//        LoginUser user = new LoginUser()
+//                .setId(adminVO.getId())
+//                .setRole(UserRole.ADMIN);
+//
+//        session.setAttribute(Consts.SESSION_USER_NAME, user);
+//        // 30分钟有效期
+//        session.setMaxInactiveInterval(30 * 60);
+//        return adminVO;
+//    }
+//
+//    /**
+//     * 获取注册教师列表
+//     */
+//    @Auth(roles = UserRole.ADMIN, message = "获取注册教师列表")
+//    @GetMapping("/user")
+//    public PageResponse<UserVO> getUsers(LoginUser admin, UserRole role, UserState state,
+//                                         @RequestParam(required = false, defaultValue = "") String key,
+//                                         @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
+//        return PageResponse.of(adminService.getUsers(role, state, key, pageable));
+//    }
+//
+//    /**
+//     * 审核通过用户
+//     */
+//    @Auth(roles = UserRole.ADMIN, message = "审核通过用户")
+//    @PutMapping("/user/{userId}/pass")
+//    public void passUser(LoginUser admin, @PathVariable Long userId) {
+//        adminService.passUser(admin, userId);
+//    }
+//
+//    /**
+//     * 封禁用户
+//     */
+//    @Auth(roles = UserRole.ADMIN, message = "封禁用户")
+//    @PutMapping("/user/{userId}/lock")
+//    public void lockUser(LoginUser admin, @PathVariable Long userId) {
+//        adminService.lockUser(admin, userId);
+//    }
+//
+//    /**
+//     * 解封用户
+//     */
+//    @Auth(roles = UserRole.ADMIN, message = "解封用户")
+//    @PutMapping("/user/{userId}/unlock")
+//    public void unlockUser(LoginUser admin, @PathVariable Long userId) {
+//        adminService.unlockUser(admin, userId);
+//    }
+//}

+ 43 - 43
src/main/java/nju/seec/helper/controller/CodeController.java

@@ -1,43 +1,43 @@
-package nju.seec.helper.controller;
-
-import nju.seec.helper.dto.validator.phone.Phone;
-import nju.seec.helper.dto.validator.schoolemail.SchoolEmail;
-import nju.seec.helper.service.CodeService;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.validation.constraints.NotBlank;
-
-/**
- * 发送验证码
- *
- * @author cst
- */
-@Validated
-@RestController
-@RequestMapping("/api/code")
-public class CodeController {
-    private final CodeService codeService;
-
-    public CodeController(CodeService codeService) {
-        this.codeService = codeService;
-    }
-
-    /**
-     * 发送邮箱验证码
-     */
-    @PostMapping("/email")
-    public void sendEmailCode(@NotBlank(message = "邮箱不能为空") @SchoolEmail String email) {
-        codeService.sendEmailCode(email);
-    }
-
-    /**
-     * 发送手机验证码
-     */
-    @PostMapping("/phone")
-    public void sendPhoneCode(@NotBlank(message = "手机号不能为空") @Phone String phone) {
-        codeService.sendPhoneCode(phone);
-    }
-}
+//package nju.seec.helper.controller;
+//
+//import nju.seec.helper.dto.validator.phone.Phone;
+//import nju.seec.helper.dto.validator.schoolemail.SchoolEmail;
+//import nju.seec.helper.service.CodeService;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.PostMapping;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import javax.validation.constraints.NotBlank;
+//
+///**
+// * 发送验证码
+// *
+// * @author cst
+// */
+//@Validated
+//@RestController
+//@RequestMapping("/api/code")
+//public class CodeController {
+//    private final CodeService codeService;
+//
+//    public CodeController(CodeService codeService) {
+//        this.codeService = codeService;
+//    }
+//
+//    /**
+//     * 发送邮箱验证码
+//     */
+//    @PostMapping("/email")
+//    public void sendEmailCode(@NotBlank(message = "邮箱不能为空") @SchoolEmail String email) {
+//        codeService.sendEmailCode(email);
+//    }
+//
+//    /**
+//     * 发送手机验证码
+//     */
+//    @PostMapping("/phone")
+//    public void sendPhoneCode(@NotBlank(message = "手机号不能为空") @Phone String phone) {
+//        codeService.sendPhoneCode(phone);
+//    }
+//}

+ 9 - 9
src/main/java/nju/seec/helper/controller/CommentController.java

@@ -4,7 +4,7 @@ import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.comment.CommentDTO;
 import nju.seec.helper.dto.comment.CommentDTO;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.CommentService;
 import nju.seec.helper.service.CommentService;
 import nju.seec.helper.util.JsonUtils;
 import nju.seec.helper.util.JsonUtils;
 import nju.seec.helper.vo.CommentVO;
 import nju.seec.helper.vo.CommentVO;
@@ -33,7 +33,7 @@ public class CommentController {
     /**
     /**
      * 发表评论
      * 发表评论
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "发表评论")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "发表评论")
     @PostMapping
     @PostMapping
     public CommentVO createComment(LoginUser user,
     public CommentVO createComment(LoginUser user,
                                    @Validated @RequestBody CommentDTO commentDTO) {
                                    @Validated @RequestBody CommentDTO commentDTO) {
@@ -45,7 +45,7 @@ public class CommentController {
     /**
     /**
      * 删除评论
      * 删除评论
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "删除评论")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "删除评论")
     @DeleteMapping("/{commentId}")
     @DeleteMapping("/{commentId}")
     public void deleteComment(LoginUser user,
     public void deleteComment(LoginUser user,
                               @PathVariable Long commentId) {
                               @PathVariable Long commentId) {
@@ -55,7 +55,7 @@ public class CommentController {
     /**
     /**
      * 教师置顶评论
      * 教师置顶评论
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "置顶评论")
+    @Auth(roles = UserRole.TEACHER, message = "置顶评论")
     @PostMapping("/{commentId}/top")
     @PostMapping("/{commentId}/top")
     public void topComment(LoginUser user,
     public void topComment(LoginUser user,
                            @PathVariable Long commentId) {
                            @PathVariable Long commentId) {
@@ -65,7 +65,7 @@ public class CommentController {
     /**
     /**
      * 教师取消置顶评论
      * 教师取消置顶评论
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "取消置顶评论")
+    @Auth(roles = UserRole.TEACHER, message = "取消置顶评论")
     @PostMapping("/{commentId}/unTop")
     @PostMapping("/{commentId}/unTop")
     public void unTopComment(LoginUser user,
     public void unTopComment(LoginUser user,
                              @PathVariable Long commentId) {
                              @PathVariable Long commentId) {
@@ -75,7 +75,7 @@ public class CommentController {
     /**
     /**
      * 取得某一页的评论信息
      * 取得某一页的评论信息
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取评论")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取评论")
     @GetMapping("/slide/{slideId}")
     @GetMapping("/slide/{slideId}")
     public PageResponse<CommentVO> getComments(@PathVariable Long slideId,
     public PageResponse<CommentVO> getComments(@PathVariable Long slideId,
                                                @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
                                                @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
@@ -86,7 +86,7 @@ public class CommentController {
     /**
     /**
      * 取得某一评论
      * 取得某一评论
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取评论")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取评论")
     @GetMapping("/{commentId}")
     @GetMapping("/{commentId}")
     public CommentVO getOneComment(LoginUser user, @PathVariable Long commentId) {
     public CommentVO getOneComment(LoginUser user, @PathVariable Long commentId) {
         return commentService.getOneComment(user, commentId);
         return commentService.getOneComment(user, commentId);
@@ -95,7 +95,7 @@ public class CommentController {
     /**
     /**
      * 取得自己某一页的评论
      * 取得自己某一页的评论
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取自己的评论")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取自己的评论")
     @GetMapping("/slide/{slideId}/self")
     @GetMapping("/slide/{slideId}/self")
     public PageResponse<CommentVO> getSelfComments(LoginUser user,
     public PageResponse<CommentVO> getSelfComments(LoginUser user,
                                                    @PathVariable Long slideId,
                                                    @PathVariable Long slideId,
@@ -105,7 +105,7 @@ public class CommentController {
         return PageResponse.of(commentService.getSelfCommentsBySlideAndPageNumber(user, slideId, pageNumber, show, pageable));
         return PageResponse.of(commentService.getSelfCommentsBySlideAndPageNumber(user, slideId, pageNumber, show, pageable));
     }
     }
 
 
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "修改评论展示状态")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "修改评论展示状态")
     @PutMapping("/{commentId}/show")
     @PutMapping("/{commentId}/show")
     public void modifyCommentShow(LoginUser user,
     public void modifyCommentShow(LoginUser user,
                                   @PathVariable Long commentId,
                                   @PathVariable Long commentId,

+ 10 - 10
src/main/java/nju/seec/helper/controller/CourseController.java

@@ -7,7 +7,7 @@ import nju.seec.helper.dto.course.ChooseDTO;
 import nju.seec.helper.dto.course.CourseDTO;
 import nju.seec.helper.dto.course.CourseDTO;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.groups.Modify;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.CourseService;
 import nju.seec.helper.service.CourseService;
 import nju.seec.helper.vo.CourseVO;
 import nju.seec.helper.vo.CourseVO;
 import nju.seec.helper.vo.UserVO;
 import nju.seec.helper.vo.UserVO;
@@ -33,7 +33,7 @@ public class CourseController {
     /**
     /**
      * 教师创建课程
      * 教师创建课程
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "创建课程")
+    @Auth(roles = UserRole.TEACHER, message = "创建课程")
     @PostMapping
     @PostMapping
     public CourseVO createCourse(LoginUser user,
     public CourseVO createCourse(LoginUser user,
                                  @Validated(Create.class) @RequestBody CourseDTO courseDTO) {
                                  @Validated(Create.class) @RequestBody CourseDTO courseDTO) {
@@ -43,7 +43,7 @@ public class CourseController {
     /**
     /**
      * 教师删除课程(伪删除)
      * 教师删除课程(伪删除)
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "删除课程")
+    @Auth(roles = UserRole.TEACHER, message = "删除课程")
     @DeleteMapping("/{courseId}")
     @DeleteMapping("/{courseId}")
     public void deleteCourse(LoginUser user,
     public void deleteCourse(LoginUser user,
                              @PathVariable Long courseId) {
                              @PathVariable Long courseId) {
@@ -53,7 +53,7 @@ public class CourseController {
     /**
     /**
      * 教师修改课程
      * 教师修改课程
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "修改课程")
+    @Auth(roles = UserRole.TEACHER, message = "修改课程")
     @PutMapping("/{courseId}")
     @PutMapping("/{courseId}")
     public CourseVO modifyCourse(LoginUser user,
     public CourseVO modifyCourse(LoginUser user,
                                  @PathVariable Long courseId,
                                  @PathVariable Long courseId,
@@ -64,7 +64,7 @@ public class CourseController {
     /**
     /**
      * 学生选课
      * 学生选课
      */
      */
-    @Auth(roles = UserType.STUDENT, message = "选课")
+    @Auth(roles = UserRole.STUDENT, message = "选课")
     @PostMapping("/{courseId}/choose")
     @PostMapping("/{courseId}/choose")
     public void chooseCourse(LoginUser user,
     public void chooseCourse(LoginUser user,
                              @PathVariable Long courseId,
                              @PathVariable Long courseId,
@@ -75,7 +75,7 @@ public class CourseController {
     /**
     /**
      * 学生退课
      * 学生退课
      */
      */
-    @Auth(roles = UserType.STUDENT, message = "退课")
+    @Auth(roles = UserRole.STUDENT, message = "退课")
     @PostMapping("/{courseId}/quit")
     @PostMapping("/{courseId}/quit")
     public void quitCourse(LoginUser user,
     public void quitCourse(LoginUser user,
                            @PathVariable Long courseId) {
                            @PathVariable Long courseId) {
@@ -94,7 +94,7 @@ public class CourseController {
     /**
     /**
      * 获取创建课程列表
      * 获取创建课程列表
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取创建课程列表")
+    @Auth(roles = UserRole.TEACHER, message = "获取创建课程列表")
     @GetMapping("/created")
     @GetMapping("/created")
     public PageResponse<CourseVO> getCreatedCourses(LoginUser user,
     public PageResponse<CourseVO> getCreatedCourses(LoginUser user,
                                                     @RequestParam(required = false, defaultValue = "") String key,
                                                     @RequestParam(required = false, defaultValue = "") String key,
@@ -105,7 +105,7 @@ public class CourseController {
     /**
     /**
      * 获取选课列表
      * 获取选课列表
      */
      */
-    @Auth(roles = UserType.STUDENT, message = "获取选课列表")
+    @Auth(roles = UserRole.STUDENT, message = "获取选课列表")
     @GetMapping("/chosen")
     @GetMapping("/chosen")
     public PageResponse<CourseVO> getChosenCourses(LoginUser user,
     public PageResponse<CourseVO> getChosenCourses(LoginUser user,
                                                    @RequestParam(required = false, defaultValue = "") String key,
                                                    @RequestParam(required = false, defaultValue = "") String key,
@@ -116,7 +116,7 @@ public class CourseController {
     /**
     /**
      * 获取课程选课码
      * 获取课程选课码
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取选课码")
+    @Auth(roles = UserRole.TEACHER, message = "获取选课码")
     @GetMapping("/{courseId}/code")
     @GetMapping("/{courseId}/code")
     public String getCourseCode(LoginUser user,
     public String getCourseCode(LoginUser user,
                                 @PathVariable Long courseId) {
                                 @PathVariable Long courseId) {
@@ -134,7 +134,7 @@ public class CourseController {
     /**
     /**
      * 获取选课名单
      * 获取选课名单
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取选课名单")
+    @Auth(roles = UserRole.TEACHER, message = "获取选课名单")
     @GetMapping("/{courseId}/students")
     @GetMapping("/{courseId}/students")
     public PageResponse<UserVO> getChooseStudents(LoginUser user,
     public PageResponse<UserVO> getChooseStudents(LoginUser user,
                                                   @PathVariable Long courseId,
                                                   @PathVariable Long courseId,

+ 5 - 5
src/main/java/nju/seec/helper/controller/CourseFileController.java

@@ -4,7 +4,7 @@ import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.course.CourseFileDTO;
 import nju.seec.helper.dto.course.CourseFileDTO;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.CourseFileService;
 import nju.seec.helper.service.CourseFileService;
 import nju.seec.helper.vo.CourseFileVO;
 import nju.seec.helper.vo.CourseFileVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
@@ -29,7 +29,7 @@ public class CourseFileController {
     /**
     /**
      * 上传课程附件
      * 上传课程附件
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "上传课程附件")
+    @Auth(roles = UserRole.TEACHER, message = "上传课程附件")
     @PostMapping
     @PostMapping
     public void uploadCourseFile(LoginUser user,
     public void uploadCourseFile(LoginUser user,
                                  @Validated CourseFileDTO courseFileDTO) {
                                  @Validated CourseFileDTO courseFileDTO) {
@@ -39,7 +39,7 @@ public class CourseFileController {
     /**
     /**
      * 删除课程附件
      * 删除课程附件
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "删除课程附件")
+    @Auth(roles = UserRole.TEACHER, message = "删除课程附件")
     @DeleteMapping("/{courseFileId}")
     @DeleteMapping("/{courseFileId}")
     public void deleteCourseFile(LoginUser user,
     public void deleteCourseFile(LoginUser user,
                                  @PathVariable Long courseFileId) {
                                  @PathVariable Long courseFileId) {
@@ -49,7 +49,7 @@ public class CourseFileController {
     /**
     /**
      * 获取课程附件
      * 获取课程附件
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课程附件")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课程附件")
     @GetMapping("/course/{courseId}")
     @GetMapping("/course/{courseId}")
     public PageResponse<CourseFileVO> getCourseFilesByCourse(LoginUser user,
     public PageResponse<CourseFileVO> getCourseFilesByCourse(LoginUser user,
                                                              @PathVariable Long courseId,
                                                              @PathVariable Long courseId,
@@ -61,7 +61,7 @@ public class CourseFileController {
     /**
     /**
      * 获取课程附件链接
      * 获取课程附件链接
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课程附件链接")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课程附件链接")
     @GetMapping("/{courseFileId}/url")
     @GetMapping("/{courseFileId}/url")
     public String getOneCourseFile(LoginUser user,
     public String getOneCourseFile(LoginUser user,
                                    @PathVariable Long courseFileId) {
                                    @PathVariable Long courseFileId) {

+ 5 - 5
src/main/java/nju/seec/helper/controller/MessageController.java

@@ -5,7 +5,7 @@ import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.message.MessageDTO;
 import nju.seec.helper.dto.message.MessageDTO;
 import nju.seec.helper.entity.Message;
 import nju.seec.helper.entity.Message;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.MessageService;
 import nju.seec.helper.service.MessageService;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;
 import org.springframework.data.web.PageableDefault;
@@ -29,7 +29,7 @@ public class MessageController {
     /**
     /**
      * 设置已读
      * 设置已读
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "设置已读")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "设置已读")
     @PutMapping("/read")
     @PutMapping("/read")
     public void readMessages(LoginUser user,
     public void readMessages(LoginUser user,
                              @Validated @RequestBody MessageDTO messageDTO) {
                              @Validated @RequestBody MessageDTO messageDTO) {
@@ -39,7 +39,7 @@ public class MessageController {
     /**
     /**
      * 删除消息
      * 删除消息
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "删除消息")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "删除消息")
     @PutMapping("/delete")
     @PutMapping("/delete")
     public void deleteMessages(LoginUser user,
     public void deleteMessages(LoginUser user,
                                @Validated @RequestBody MessageDTO messageDTO) {
                                @Validated @RequestBody MessageDTO messageDTO) {
@@ -49,7 +49,7 @@ public class MessageController {
     /**
     /**
      * 获取未读消息
      * 获取未读消息
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取未读消息")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取未读消息")
     @GetMapping("/unread")
     @GetMapping("/unread")
     public PageResponse<Message> getUnreadMessages(LoginUser user,
     public PageResponse<Message> getUnreadMessages(LoginUser user,
                                                    @RequestParam(required = false, defaultValue = "") String key,
                                                    @RequestParam(required = false, defaultValue = "") String key,
@@ -60,7 +60,7 @@ public class MessageController {
     /**
     /**
      * 获取已读消息
      * 获取已读消息
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取已读消息")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取已读消息")
     @GetMapping("/read")
     @GetMapping("/read")
     public PageResponse<Message> getReadMessages(LoginUser user,
     public PageResponse<Message> getReadMessages(LoginUser user,
                                                  @RequestParam(required = false, defaultValue = "") String key,
                                                  @RequestParam(required = false, defaultValue = "") String key,

+ 6 - 6
src/main/java/nju/seec/helper/controller/NoticeController.java

@@ -6,7 +6,7 @@ import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.notice.NoticeDTO;
 import nju.seec.helper.dto.notice.NoticeDTO;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.NoticeService;
 import nju.seec.helper.service.NoticeService;
 import nju.seec.helper.vo.NoticeVO;
 import nju.seec.helper.vo.NoticeVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
@@ -35,7 +35,7 @@ public class NoticeController {
      * @param noticeDTO
      * @param noticeDTO
      * @return
      * @return
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "发布公告")
+    @Auth(roles = UserRole.TEACHER, message = "发布公告")
     @PostMapping
     @PostMapping
     public NoticeVO createNotice(LoginUser user,
     public NoticeVO createNotice(LoginUser user,
                                  @Validated(Create.class) @RequestBody NoticeDTO noticeDTO) {
                                  @Validated(Create.class) @RequestBody NoticeDTO noticeDTO) {
@@ -50,7 +50,7 @@ public class NoticeController {
      * @param noticeDTO
      * @param noticeDTO
      * @return
      * @return
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "修改公告")
+    @Auth(roles = UserRole.TEACHER, message = "修改公告")
     @PutMapping("/{noticeId}")
     @PutMapping("/{noticeId}")
     public NoticeVO modifyNotice(LoginUser user,
     public NoticeVO modifyNotice(LoginUser user,
                                  @PathVariable Long noticeId,
                                  @PathVariable Long noticeId,
@@ -61,7 +61,7 @@ public class NoticeController {
     /**
     /**
      * 删除公告
      * 删除公告
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "删除公告")
+    @Auth(roles = UserRole.TEACHER, message = "删除公告")
     @DeleteMapping("/{noticeId}")
     @DeleteMapping("/{noticeId}")
     public void deleteNotice(LoginUser user,
     public void deleteNotice(LoginUser user,
                              @PathVariable Long noticeId) {
                              @PathVariable Long noticeId) {
@@ -71,7 +71,7 @@ public class NoticeController {
     /**
     /**
      * 获取课程公告
      * 获取课程公告
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课程公告")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课程公告")
     @GetMapping("/course/{courseId}")
     @GetMapping("/course/{courseId}")
     public PageResponse<NoticeVO> getNotices(LoginUser user,
     public PageResponse<NoticeVO> getNotices(LoginUser user,
                                              @PathVariable Long courseId,
                                              @PathVariable Long courseId,
@@ -83,7 +83,7 @@ public class NoticeController {
     /**
     /**
      * 获取某一公告
      * 获取某一公告
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取公告")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取公告")
     @GetMapping("/{noticeId}")
     @GetMapping("/{noticeId}")
     public NoticeVO getOneNotice(LoginUser user,
     public NoticeVO getOneNotice(LoginUser user,
                                  @PathVariable Long noticeId) {
                                  @PathVariable Long noticeId) {

+ 10 - 10
src/main/java/nju/seec/helper/controller/QuestionController.java

@@ -6,7 +6,7 @@ import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.question.BaseQuestionDTO;
 import nju.seec.helper.dto.question.BaseQuestionDTO;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.QuestionService;
 import nju.seec.helper.service.QuestionService;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
@@ -37,7 +37,7 @@ public class QuestionController {
     /**
     /**
      * 获得题目列表
      * 获得题目列表
      */
      */
-    @Auth(roles = {UserType.TEACHER}, message = "获得题目列表")
+    @Auth(roles = {UserRole.TEACHER}, message = "获得题目列表")
     @GetMapping
     @GetMapping
     public PageResponse<BaseQuestionVO> getQuestionList(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
     public PageResponse<BaseQuestionVO> getQuestionList(LoginUser user, @RequestParam(required = false, defaultValue = "") String key, @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
         return PageResponse.of(questionService.getQuestions(user, key, pageable));
         return PageResponse.of(questionService.getQuestions(user, key, pageable));
@@ -46,7 +46,7 @@ public class QuestionController {
     /**
     /**
      * 获取某一测试题目
      * 获取某一测试题目
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获得测试题目")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获得测试题目")
     @GetMapping("/quiz/{quizId}")
     @GetMapping("/quiz/{quizId}")
     public List<BaseQuestionVO> getQuestionsByQuiz(LoginUser user, @PathVariable Long quizId) {
     public List<BaseQuestionVO> getQuestionsByQuiz(LoginUser user, @PathVariable Long quizId) {
         return questionService.getQuestionsByQuiz(user, quizId);
         return questionService.getQuestionsByQuiz(user, quizId);
@@ -55,7 +55,7 @@ public class QuestionController {
     /**
     /**
      * 获取某一题目信息
      * 获取某一题目信息
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取题目信息")
+    @Auth(roles = UserRole.TEACHER, message = "获取题目信息")
     @GetMapping("/{questionId}")
     @GetMapping("/{questionId}")
     public BaseQuestionVO getOneQuestion(LoginUser user, @PathVariable String questionId) {
     public BaseQuestionVO getOneQuestion(LoginUser user, @PathVariable String questionId) {
         return questionService.getOneQuestion(user, questionId);
         return questionService.getOneQuestion(user, questionId);
@@ -64,7 +64,7 @@ public class QuestionController {
     /**
     /**
      * 创建题目
      * 创建题目
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "创建题目")
+    @Auth(roles = UserRole.TEACHER, message = "创建题目")
     @PostMapping
     @PostMapping
     public BaseQuestionVO createQuestion(LoginUser user, @Validated(Create.class) @RequestBody BaseQuestionDTO baseQuestionDTO) {
     public BaseQuestionVO createQuestion(LoginUser user, @Validated(Create.class) @RequestBody BaseQuestionDTO baseQuestionDTO) {
         return questionService.createQuestion(user, baseQuestionDTO);
         return questionService.createQuestion(user, baseQuestionDTO);
@@ -73,7 +73,7 @@ public class QuestionController {
     /**
     /**
      * 修改题目
      * 修改题目
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "修改题目")
+    @Auth(roles = UserRole.TEACHER, message = "修改题目")
     @PutMapping("/{questionId}")
     @PutMapping("/{questionId}")
     public BaseQuestionVO modifyQuestion(LoginUser user, @PathVariable String questionId, @Validated(Modify.class) @RequestBody BaseQuestionDTO baseQuestionDTO) {
     public BaseQuestionVO modifyQuestion(LoginUser user, @PathVariable String questionId, @Validated(Modify.class) @RequestBody BaseQuestionDTO baseQuestionDTO) {
         return questionService.modifyQuestion(user, questionId, baseQuestionDTO);
         return questionService.modifyQuestion(user, questionId, baseQuestionDTO);
@@ -82,7 +82,7 @@ public class QuestionController {
     /**
     /**
      * 删除题目
      * 删除题目
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "删除题目")
+    @Auth(roles = UserRole.TEACHER, message = "删除题目")
     @DeleteMapping("/{questionId}")
     @DeleteMapping("/{questionId}")
     public void deleteQuestion(LoginUser user, @PathVariable String questionId) {
     public void deleteQuestion(LoginUser user, @PathVariable String questionId) {
         questionService.deleteQuestion(user, questionId);
         questionService.deleteQuestion(user, questionId);
@@ -91,7 +91,7 @@ public class QuestionController {
     /**
     /**
      * 获取创建题目
      * 获取创建题目
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取创建的题目")
+    @Auth(roles = UserRole.TEACHER, message = "获取创建的题目")
     @GetMapping("/created")
     @GetMapping("/created")
     public PageResponse<BaseQuestionVO> getCreatedQuestions(LoginUser user,
     public PageResponse<BaseQuestionVO> getCreatedQuestions(LoginUser user,
                                                             @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
                                                             @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
@@ -101,13 +101,13 @@ public class QuestionController {
     /**
     /**
      * 获取创建题目ID
      * 获取创建题目ID
      */
      */
-    @Auth(roles = UserType.TEACHER)
+    @Auth(roles = UserRole.TEACHER)
     @GetMapping("/created/ids")
     @GetMapping("/created/ids")
     public Set<String> getCreatedQuestionIds(LoginUser user) {
     public Set<String> getCreatedQuestionIds(LoginUser user) {
         return questionService.getIdsOfCreatedQuestions(user);
         return questionService.getIdsOfCreatedQuestions(user);
     }
     }
 
 
-    @Auth(roles = UserType.STUDENT, message = "收藏题目")
+    @Auth(roles = UserRole.STUDENT, message = "收藏题目")
     @PostMapping("/{questionId}/star")
     @PostMapping("/{questionId}/star")
     public void starQuestion(LoginUser user, @PathVariable String questionId) {
     public void starQuestion(LoginUser user, @PathVariable String questionId) {
         questionService.starQuestion(user, questionId);
         questionService.starQuestion(user, questionId);

+ 13 - 13
src/main/java/nju/seec/helper/controller/QuizController.java

@@ -8,7 +8,7 @@ import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.quiz.QuizDTO;
 import nju.seec.helper.dto.quiz.QuizDTO;
 import nju.seec.helper.dto.quiz.QuizStudentAnswerDTO;
 import nju.seec.helper.dto.quiz.QuizStudentAnswerDTO;
 import nju.seec.helper.enums.QuizState;
 import nju.seec.helper.enums.QuizState;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.QuizService;
 import nju.seec.helper.service.QuizService;
 import nju.seec.helper.service.QuizStudentAnswerService;
 import nju.seec.helper.service.QuizStudentAnswerService;
 import nju.seec.helper.vo.quiz.QuizStudentAnswerStatisticVO;
 import nju.seec.helper.vo.quiz.QuizStudentAnswerStatisticVO;
@@ -41,13 +41,13 @@ public class QuizController {
     /**
     /**
      * 基于课件获取测试列表
      * 基于课件获取测试列表
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获得测试列表")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获得测试列表")
     @GetMapping("/slide/{slideId}")
     @GetMapping("/slide/{slideId}")
     public PageResponse<QuizVO> getQuizzesBySlide(LoginUser user,
     public PageResponse<QuizVO> getQuizzesBySlide(LoginUser user,
                                                   @PathVariable Long slideId,
                                                   @PathVariable Long slideId,
                                                   @RequestParam(required = false, defaultValue = "") String key,
                                                   @RequestParam(required = false, defaultValue = "") String key,
                                                   @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
                                                   @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        switch (user.getType()) {
+        switch (user.getRole()) {
             case TEACHER:
             case TEACHER:
                 return PageResponse.of(quizService.teacherGetQuizzesBySlide(user, slideId, key, pageable));
                 return PageResponse.of(quizService.teacherGetQuizzesBySlide(user, slideId, key, pageable));
             case STUDENT:
             case STUDENT:
@@ -60,13 +60,13 @@ public class QuizController {
     /**
     /**
      * 基于状态获取测试列表
      * 基于状态获取测试列表
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取测试列表")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取测试列表")
     @GetMapping("/state")
     @GetMapping("/state")
     public PageResponse<QuizVO> getQuizzesByState(LoginUser user,
     public PageResponse<QuizVO> getQuizzesByState(LoginUser user,
                                                   QuizState state,
                                                   QuizState state,
                                                   @RequestParam(required = false, defaultValue = "") String key,
                                                   @RequestParam(required = false, defaultValue = "") String key,
                                                   @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
                                                   @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        switch (user.getType()) {
+        switch (user.getRole()) {
             case TEACHER:
             case TEACHER:
                 return PageResponse.of(quizService.teacherGetQuizzesByState(user, state, key, pageable));
                 return PageResponse.of(quizService.teacherGetQuizzesByState(user, state, key, pageable));
             case STUDENT:
             case STUDENT:
@@ -79,7 +79,7 @@ public class QuizController {
     /**
     /**
      * 获得某一测试的详细内容
      * 获得某一测试的详细内容
      */
      */
-    @Auth(roles = {UserType.STUDENT, UserType.TEACHER}, message = "获得测试")
+    @Auth(roles = {UserRole.STUDENT, UserRole.TEACHER}, message = "获得测试")
     @GetMapping("/{quizId}")
     @GetMapping("/{quizId}")
     public QuizVO getOneQuiz(LoginUser user, @PathVariable("quizId") Long quizId) {
     public QuizVO getOneQuiz(LoginUser user, @PathVariable("quizId") Long quizId) {
         return quizService.getOneQuiz(user, quizId);
         return quizService.getOneQuiz(user, quizId);
@@ -88,7 +88,7 @@ public class QuizController {
     /**
     /**
      * 创建测试
      * 创建测试
      */
      */
-    @Auth(roles = {UserType.TEACHER}, message = "创建测试")
+    @Auth(roles = {UserRole.TEACHER}, message = "创建测试")
     @PostMapping
     @PostMapping
     public QuizVO createQuiz(LoginUser user, @Validated(Create.class) @RequestBody QuizDTO quizDTO) {
     public QuizVO createQuiz(LoginUser user, @Validated(Create.class) @RequestBody QuizDTO quizDTO) {
         return quizService.createQuiz(user, quizDTO);
         return quizService.createQuiz(user, quizDTO);
@@ -97,7 +97,7 @@ public class QuizController {
     /**
     /**
      * 修改测试 (仅限未开始时可以修改)
      * 修改测试 (仅限未开始时可以修改)
      */
      */
-    @Auth(roles = {UserType.TEACHER}, message = "修改测试")
+    @Auth(roles = {UserRole.TEACHER}, message = "修改测试")
     @PutMapping("/{quizId}")
     @PutMapping("/{quizId}")
     public QuizVO updateQuiz(LoginUser user, @PathVariable Long quizId, @Validated(Modify.class) @RequestBody QuizDTO quizDTO) {
     public QuizVO updateQuiz(LoginUser user, @PathVariable Long quizId, @Validated(Modify.class) @RequestBody QuizDTO quizDTO) {
         return quizService.modifyQuiz(user, quizId, quizDTO);
         return quizService.modifyQuiz(user, quizId, quizDTO);
@@ -106,7 +106,7 @@ public class QuizController {
     /**
     /**
      * 删除测试 (伪删除)
      * 删除测试 (伪删除)
      */
      */
-    @Auth(roles = {UserType.TEACHER}, message = "删除测试")
+    @Auth(roles = {UserRole.TEACHER}, message = "删除测试")
     @DeleteMapping("/{quizId}")
     @DeleteMapping("/{quizId}")
     public void deleteQuiz(LoginUser user, @PathVariable("quizId") String quizId) {
     public void deleteQuiz(LoginUser user, @PathVariable("quizId") String quizId) {
         quizService.deleteQuiz(user, Long.valueOf(quizId));
         quizService.deleteQuiz(user, Long.valueOf(quizId));
@@ -115,7 +115,7 @@ public class QuizController {
     /**
     /**
      * 提交作答
      * 提交作答
      */
      */
-    @Auth(roles = {UserType.STUDENT}, message = "提交作答")
+    @Auth(roles = {UserRole.STUDENT}, message = "提交作答")
     @PostMapping("/{quizId}/student-answer")
     @PostMapping("/{quizId}/student-answer")
     public QuizStudentAnswerVO submitQuizStudentAnswer(LoginUser user, @PathVariable Long quizId, @Validated @RequestBody QuizStudentAnswerDTO quizStudentAnswerDTO) {
     public QuizStudentAnswerVO submitQuizStudentAnswer(LoginUser user, @PathVariable Long quizId, @Validated @RequestBody QuizStudentAnswerDTO quizStudentAnswerDTO) {
         return quizStudentAnswerService.submitQuizStudentAnswer(user, quizId, quizStudentAnswerDTO);
         return quizStudentAnswerService.submitQuizStudentAnswer(user, quizId, quizStudentAnswerDTO);
@@ -124,7 +124,7 @@ public class QuizController {
     /**
     /**
      * 获取测试作答列表
      * 获取测试作答列表
      */
      */
-    @Auth(roles = {UserType.TEACHER}, message = "获取学生作答")
+    @Auth(roles = {UserRole.TEACHER}, message = "获取学生作答")
     @GetMapping("/{quizId}/student-answers")
     @GetMapping("/{quizId}/student-answers")
     public PageResponse<QuizStudentAnswerVO> getQuizStudentAnswers(LoginUser user,
     public PageResponse<QuizStudentAnswerVO> getQuizStudentAnswers(LoginUser user,
                                                                    @PathVariable Long quizId,
                                                                    @PathVariable Long quizId,
@@ -136,7 +136,7 @@ public class QuizController {
     /**
     /**
      * 学生获取某一测试自己的作答
      * 学生获取某一测试自己的作答
      */
      */
-    @Auth(roles = {UserType.STUDENT}, message = "获取作答")
+    @Auth(roles = {UserRole.STUDENT}, message = "获取作答")
     @GetMapping("/{quizId}/student-answer")
     @GetMapping("/{quizId}/student-answer")
     public QuizStudentAnswerVO getOneQuizStudentAnswer(LoginUser user, @PathVariable Long quizId) {
     public QuizStudentAnswerVO getOneQuizStudentAnswer(LoginUser user, @PathVariable Long quizId) {
         return quizStudentAnswerService.getQuizStudentAnswer(user, quizId);
         return quizStudentAnswerService.getQuizStudentAnswer(user, quizId);
@@ -145,7 +145,7 @@ public class QuizController {
     /**
     /**
      * 获取测试作答提交的统计信息
      * 获取测试作答提交的统计信息
      */
      */
-    @Auth(roles = {UserType.TEACHER}, message = "获取测试统计消息")
+    @Auth(roles = {UserRole.TEACHER}, message = "获取测试统计消息")
     @GetMapping("/{quizId}/statistic")
     @GetMapping("/{quizId}/statistic")
     public QuizStudentAnswerStatisticVO getQuizStatistic(LoginUser user, @PathVariable Long quizId) {
     public QuizStudentAnswerStatisticVO getQuizStatistic(LoginUser user, @PathVariable Long quizId) {
         return quizStudentAnswerService.getQuizStudentAnswerStatistic(user, quizId);
         return quizStudentAnswerService.getQuizStudentAnswerStatistic(user, quizId);

+ 3 - 3
src/main/java/nju/seec/helper/controller/ReplyController.java

@@ -3,7 +3,7 @@ package nju.seec.helper.controller;
 import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.dto.reply.ReplyDTO;
 import nju.seec.helper.dto.reply.ReplyDTO;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.ReplyService;
 import nju.seec.helper.service.ReplyService;
 import nju.seec.helper.vo.ReplyVO;
 import nju.seec.helper.vo.ReplyVO;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
@@ -26,7 +26,7 @@ public class ReplyController {
     /**
     /**
      * 教师回复
      * 教师回复
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "回复")
+    @Auth(roles = UserRole.TEACHER, message = "回复")
     @PostMapping
     @PostMapping
     public ReplyVO createReply(LoginUser user,
     public ReplyVO createReply(LoginUser user,
                                @Validated @RequestBody ReplyDTO replyDTO) {
                                @Validated @RequestBody ReplyDTO replyDTO) {
@@ -36,7 +36,7 @@ public class ReplyController {
     /**
     /**
      * 教师删除回复
      * 教师删除回复
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "删除回复")
+    @Auth(roles = UserRole.TEACHER, message = "删除回复")
     @DeleteMapping("/{replyId}")
     @DeleteMapping("/{replyId}")
     public void deleteReply(LoginUser user,
     public void deleteReply(LoginUser user,
                             @PathVariable Long replyId) {
                             @PathVariable Long replyId) {

+ 10 - 10
src/main/java/nju/seec/helper/controller/SlideController.java

@@ -8,7 +8,7 @@ import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.slide.SlideDTO;
 import nju.seec.helper.dto.slide.SlideDTO;
 import nju.seec.helper.dto.slide.SlideFileDTO;
 import nju.seec.helper.dto.slide.SlideFileDTO;
 import nju.seec.helper.dto.slide.SlideStateDTO;
 import nju.seec.helper.dto.slide.SlideStateDTO;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.SlideService;
 import nju.seec.helper.service.SlideService;
 import nju.seec.helper.vo.SlideVO;
 import nju.seec.helper.vo.SlideVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
@@ -34,7 +34,7 @@ public class SlideController {
     /**
     /**
      * 教师创建课件
      * 教师创建课件
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "创建课件")
+    @Auth(roles = UserRole.TEACHER, message = "创建课件")
     @PostMapping
     @PostMapping
     public ResponseEntity<SlideVO> createSlide(LoginUser user,
     public ResponseEntity<SlideVO> createSlide(LoginUser user,
                                                @Validated(Create.class) SlideDTO slideDTO) {
                                                @Validated(Create.class) SlideDTO slideDTO) {
@@ -45,7 +45,7 @@ public class SlideController {
     /**
     /**
      * 教师修改课件
      * 教师修改课件
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "修改课件")
+    @Auth(roles = UserRole.TEACHER, message = "修改课件")
     @PutMapping("/{slideId}")
     @PutMapping("/{slideId}")
     public SlideVO modifySlide(LoginUser user,
     public SlideVO modifySlide(LoginUser user,
                                @PathVariable Long slideId,
                                @PathVariable Long slideId,
@@ -56,7 +56,7 @@ public class SlideController {
     /**
     /**
      * 教师修改课件状态
      * 教师修改课件状态
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "修改课件状态")
+    @Auth(roles = UserRole.TEACHER, message = "修改课件状态")
     @PutMapping("/{slideId}/state")
     @PutMapping("/{slideId}/state")
     public void modifySlideState(LoginUser user,
     public void modifySlideState(LoginUser user,
                                  @PathVariable Long slideId,
                                  @PathVariable Long slideId,
@@ -67,7 +67,7 @@ public class SlideController {
     /**
     /**
      * 教师修改课件文件
      * 教师修改课件文件
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "修改课件文件")
+    @Auth(roles = UserRole.TEACHER, message = "修改课件文件")
     @PutMapping("/{slideId}/file")
     @PutMapping("/{slideId}/file")
     public void modifySlideFile(LoginUser user,
     public void modifySlideFile(LoginUser user,
                                 @PathVariable Long slideId,
                                 @PathVariable Long slideId,
@@ -78,7 +78,7 @@ public class SlideController {
     /**
     /**
      * 教师删除课件
      * 教师删除课件
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "删除课件")
+    @Auth(roles = UserRole.TEACHER, message = "删除课件")
     @DeleteMapping("/{slideId}")
     @DeleteMapping("/{slideId}")
     public void deleteSlide(LoginUser user,
     public void deleteSlide(LoginUser user,
                             @PathVariable Long slideId) {
                             @PathVariable Long slideId) {
@@ -88,7 +88,7 @@ public class SlideController {
     /**
     /**
      * 教师获取课件
      * 教师获取课件
      */
      */
-    @Auth(roles = UserType.TEACHER, message = "获取课件列表")
+    @Auth(roles = UserRole.TEACHER, message = "获取课件列表")
     @GetMapping
     @GetMapping
     public PageResponse<SlideVO> getSlides(LoginUser user,
     public PageResponse<SlideVO> getSlides(LoginUser user,
                                            @RequestParam(required = false, defaultValue = "") String key,
                                            @RequestParam(required = false, defaultValue = "") String key,
@@ -99,7 +99,7 @@ public class SlideController {
     /**
     /**
      * 基于课程获取课件
      * 基于课程获取课件
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课件列表")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课件列表")
     @GetMapping("/course/{courseId}")
     @GetMapping("/course/{courseId}")
     public PageResponse<SlideVO> getSlidesByCourse(LoginUser user,
     public PageResponse<SlideVO> getSlidesByCourse(LoginUser user,
                                                    @PathVariable Long courseId,
                                                    @PathVariable Long courseId,
@@ -111,7 +111,7 @@ public class SlideController {
     /**
     /**
      * 获取课件链接
      * 获取课件链接
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课件链接")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课件链接")
     @GetMapping("/{slideId}/url")
     @GetMapping("/{slideId}/url")
     public String getSlideUrl(LoginUser user,
     public String getSlideUrl(LoginUser user,
                               @PathVariable Long slideId) {
                               @PathVariable Long slideId) {
@@ -121,7 +121,7 @@ public class SlideController {
     /**
     /**
      * 获取某课件
      * 获取某课件
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取课件")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取课件")
     @GetMapping("/{slideId}")
     @GetMapping("/{slideId}")
     public SlideVO getOneSlide(LoginUser user, @PathVariable Long slideId) {
     public SlideVO getOneSlide(LoginUser user, @PathVariable Long slideId) {
         return slideService.getOneSlide(user, slideId);
         return slideService.getOneSlide(user, slideId);

+ 75 - 88
src/main/java/nju/seec/helper/controller/UserController.java

@@ -1,26 +1,13 @@
 package nju.seec.helper.controller;
 package nju.seec.helper.controller;
 
 
-import com.google.common.collect.ImmutableMap;
 import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.aspect.auth.LoginUser;
-import nju.seec.helper.dto.common.LoginDTO;
-import nju.seec.helper.dto.groups.Create;
-import nju.seec.helper.dto.groups.Modify;
-import nju.seec.helper.dto.user.ResetPasswordDTO;
-import nju.seec.helper.dto.user.UserDTO;
-import nju.seec.helper.enums.ExceptionType;
-import nju.seec.helper.enums.UserState;
-import nju.seec.helper.enums.UserType;
-import nju.seec.helper.exception.HelperException;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.service.UserService;
 import nju.seec.helper.service.UserService;
-import nju.seec.helper.util.Consts;
 import nju.seec.helper.vo.UserVO;
 import nju.seec.helper.vo.UserVO;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpSession;
-import java.util.Map;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 /**
 /**
  * 用户
  * 用户
@@ -30,86 +17,86 @@ import java.util.Map;
 @RestController
 @RestController
 @RequestMapping("/api/user")
 @RequestMapping("/api/user")
 public class UserController {
 public class UserController {
-    @Value("${helper.user-timeout-seconds}")
-    private int userTimeoutSeconds;
-
+    //    @Value("${helper.user-timeout-seconds}")
+//    private int userTimeoutSeconds;
+//
     private final UserService userService;
     private final UserService userService;
 
 
     public UserController(UserService userService) {
     public UserController(UserService userService) {
         this.userService = userService;
         this.userService = userService;
     }
     }
-
-    /**
-     * 注册
-     */
-    @PostMapping("/register")
-    public UserVO register(@Validated(Create.class) @RequestBody UserDTO userDTO) {
-        return userService.createUser(userDTO);
-    }
-
-    private static final Map<UserState, String> STATE_MESSAGE_MAP = ImmutableMap.of(
-            UserState.CHECKING, "帐号审核中",
-            UserState.LOCKED, "帐号封禁中"
-    );
-
-    /**
-     * 邮箱登录
-     */
-    @PostMapping("/login/email")
-    public UserVO loginByEmail(@Validated @RequestBody LoginDTO loginDTO,
-                               HttpSession session) {
-        UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
-
-        if (userVO.getState() != UserState.NORMAL) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, STATE_MESSAGE_MAP.get(userVO.getState()));
-        }
-
-        LoginUser user = new LoginUser()
-                .setId(userVO.getId())
-                .setType(userVO.getType());
-
-        session.setAttribute(Consts.SESSION_USER_NAME, user);
-        session.setMaxInactiveInterval(userTimeoutSeconds);
-        return userVO;
-    }
-
-    /**
-     * 登出
-     */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "登出")
-    @PostMapping("/logout")
-    public void logout(HttpSession session) {
-        session.removeAttribute(Consts.SESSION_USER_NAME);
-    }
-
-    /**
-     * 修改个人信息
-     */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "修改个人信息")
-    @PutMapping
-    public UserVO modifyUser(LoginUser user,
-                             @Validated(Modify.class) @RequestBody UserDTO userDTO,
-                             HttpSession session) {
-        UserVO userVO = userService.modifyUser(user, userDTO);
-        user = ((LoginUser) session.getAttribute(Consts.SESSION_USER_NAME))
-                .setId(userVO.getId())
-                .setType(userVO.getType());
-        session.setAttribute(Consts.SESSION_USER_NAME, user);
-        return userVO;
-    }
-
-    /**
-     * 重设密码
-     */
-    @PutMapping("/resetPassword/email")
-    public void resetPasswordByEmail(@Validated @RequestBody ResetPasswordDTO resetPasswordDTO) {
-        userService.resetPasswordByEmail(resetPasswordDTO);
-    }
+//
+//    /**
+//     * 注册
+//     */
+//    @PostMapping("/register")
+//    public UserVO register(@Validated(Create.class) @RequestBody UserDTO userDTO) {
+//        return userService.createUser(userDTO);
+//    }
+//
+//    private static final Map<UserState, String> STATE_MESSAGE_MAP = ImmutableMap.of(
+//            UserState.CHECKING, "帐号审核中",
+//            UserState.LOCKED, "帐号封禁中"
+//    );
+//
+//    /**
+//     * 邮箱登录
+//     */
+//    @PostMapping("/login/email")
+//    public UserVO loginByEmail(@Validated @RequestBody LoginDTO loginDTO,
+//                               HttpSession session) {
+//        UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
+//
+//        if (userVO.getState() != UserState.NORMAL) {
+//            throw HelperException.of(ExceptionType.FORBIDDEN, STATE_MESSAGE_MAP.get(userVO.getState()));
+//        }
+//
+//        LoginUser user = new LoginUser()
+//                .setId(userVO.getId())
+//                .setType(userVO.getType());
+//
+//        session.setAttribute(Consts.SESSION_USER_NAME, user);
+//        session.setMaxInactiveInterval(userTimeoutSeconds);
+//        return userVO;
+//    }
+//
+//    /**
+//     * 登出
+//     */
+//    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "登出")
+//    @PostMapping("/logout")
+//    public void logout(HttpSession session) {
+//        session.removeAttribute(Consts.SESSION_USER_NAME);
+//    }
+//
+//    /**
+//     * 修改个人信息
+//     */
+//    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "修改个人信息")
+//    @PutMapping
+//    public UserVO modifyUser(LoginUser user,
+//                             @Validated(Modify.class) @RequestBody UserDTO userDTO,
+//                             HttpSession session) {
+//        UserVO userVO = userService.modifyUser(user, userDTO);
+//        user = ((LoginUser) session.getAttribute(Consts.SESSION_USER_NAME))
+//                .setId(userVO.getId())
+//                .setType(userVO.getType());
+//        session.setAttribute(Consts.SESSION_USER_NAME, user);
+//        return userVO;
+//    }
+//
+//    /**
+//     * 重设密码
+//     */
+//    @PutMapping("/resetPassword/email")
+//    public void resetPasswordByEmail(@Validated @RequestBody ResetPasswordDTO resetPasswordDTO) {
+//        userService.resetPasswordByEmail(resetPasswordDTO);
+//    }
 
 
     /**
     /**
      * 获取个人信息
      * 获取个人信息
      */
      */
-    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取个人信息")
+    @Auth(roles = {UserRole.TEACHER, UserRole.STUDENT}, message = "获取个人信息")
     @GetMapping
     @GetMapping
     public UserVO getUserInfo(LoginUser user) {
     public UserVO getUserInfo(LoginUser user) {
         return userService.getUserById(user.getId());
         return userService.getUserById(user.getId());

+ 38 - 22
src/main/java/nju/seec/helper/dao/UserDAO.java

@@ -28,39 +28,55 @@ public interface UserDAO extends JpaRepository<User, Long>, JpaSpecificationExec
                 .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到用户信息"));
                 .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到用户信息"));
     }
     }
 
 
-    /**
-     * 检查邮箱是否已存在
-     *
-     * @param email
-     * @return
-     */
-    boolean existsByEmail(String email);
-
+//    /**
+////     * 检查邮箱是否已存在
+////     *
+////     * @param email
+////     * @return
+////     */
+////    boolean existsByEmail(String email);
+////
+////
+////    /**
+////     * 检查手机号是否已存在
+////     *
+////     * @param phone
+////     * @return
+////     */
+////    boolean existsByPhone(String phone);
+////
+////    /**
+////     * 邮箱密码匹配
+////     *
+////     * @param email
+////     * @param password
+////     * @return
+////     */
+////    Optional<User> findByEmailAndPassword(String email, String password);
+////
+////    /**
+////     * 根据邮箱查询
+////     *
+////     * @param email
+////     * @return
+////     */
+////    Optional<User> findByEmail(String email);
 
 
     /**
     /**
-     * 检查手机号是否已存在
+     * 根据手机号查询
      *
      *
      * @param phone
      * @param phone
      * @return
      * @return
      */
      */
-    boolean existsByPhone(String phone);
-
-    /**
-     * 邮箱密码匹配
-     *
-     * @param email
-     * @param password
-     * @return
-     */
-    Optional<User> findByEmailAndPassword(String email, String password);
+    Optional<User> findByPhone(String phone);
 
 
     /**
     /**
-     * 根据邮箱查询
+     * 根据PID查询
      *
      *
-     * @param email
+     * @param pid
      * @return
      * @return
      */
      */
-    Optional<User> findByEmail(String email);
+    Optional<User> findByPid(Long pid);
 
 
     /**
     /**
      * ID列表查询
      * ID列表查询

+ 2 - 2
src/main/java/nju/seec/helper/dto/user/UserDTO.java

@@ -4,7 +4,7 @@ import lombok.Data;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.validator.phone.Phone;
 import nju.seec.helper.dto.validator.phone.Phone;
 import nju.seec.helper.dto.validator.schoolemail.SchoolEmail;
 import nju.seec.helper.dto.validator.schoolemail.SchoolEmail;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
 
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotBlank;
@@ -35,5 +35,5 @@ public class UserDTO implements Serializable {
     private String password;
     private String password;
 
 
     @NotNull(message = "缺少用户类型", groups = Create.class)
     @NotNull(message = "缺少用户类型", groups = Create.class)
-    private UserType type;
+    private UserRole role;
 }
 }

+ 12 - 10
src/main/java/nju/seec/helper/entity/User.java

@@ -2,12 +2,12 @@ package nju.seec.helper.entity;
 
 
 import lombok.Data;
 import lombok.Data;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
-import nju.seec.helper.enums.UserState;
-import nju.seec.helper.enums.UserType;
-import org.hibernate.annotations.*;
+import nju.seec.helper.enums.UserRole;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
 
 
-import javax.persistence.Entity;
-import javax.persistence.Table;
 import javax.persistence.*;
 import javax.persistence.*;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
@@ -36,7 +36,7 @@ public class User {
 
 
     @Enumerated(EnumType.STRING)
     @Enumerated(EnumType.STRING)
     @Column(nullable = false, updatable = false)
     @Column(nullable = false, updatable = false)
-    private UserType type;
+    private UserRole role;
 
 
     @Column(nullable = false)
     @Column(nullable = false)
     private String phone;
     private String phone;
@@ -48,8 +48,10 @@ public class User {
     @CreationTimestamp
     @CreationTimestamp
     private LocalDateTime createAt;
     private LocalDateTime createAt;
 
 
-    @ColumnDefault("'NORMAL'")
-    @Enumerated(EnumType.STRING)
-    @Column(nullable = false)
-    private UserState state;
+//    @ColumnDefault("'NORMAL'")
+//    @Enumerated(EnumType.STRING)
+//    @Column(nullable = false)
+//    private UserState state;
+
+    private Long pid;
 }
 }

+ 1 - 1
src/main/java/nju/seec/helper/enums/ExceptionType.java

@@ -10,7 +10,7 @@ import org.springframework.http.HttpStatus;
 @Getter
 @Getter
 public enum ExceptionType {
 public enum ExceptionType {
     // http code
     // http code
-    PARAM_ERROR(HttpStatus.BAD_REQUEST), NOT_LOGIN(HttpStatus.UNAUTHORIZED), FORBIDDEN(HttpStatus.FORBIDDEN), NOT_FOUND(HttpStatus.NOT_FOUND), CONFLICT(HttpStatus.CONFLICT), ERROR(HttpStatus.INTERNAL_SERVER_ERROR);
+    PARAM_ERROR(HttpStatus.BAD_REQUEST), UNAUTHORIZED(HttpStatus.UNAUTHORIZED), FORBIDDEN(HttpStatus.FORBIDDEN), NOT_FOUND(HttpStatus.NOT_FOUND), CONFLICT(HttpStatus.CONFLICT), ERROR(HttpStatus.INTERNAL_SERVER_ERROR);
 
 
     private HttpStatus status;
     private HttpStatus status;
 
 

+ 20 - 0
src/main/java/nju/seec/helper/enums/UserRole.java

@@ -0,0 +1,20 @@
+package nju.seec.helper.enums;
+
+/**
+ * @author cst
+ */
+
+public enum UserRole {
+    /**
+     * 教师
+     */
+    TEACHER,
+    /**
+     * 学生
+     */
+    STUDENT,
+    /**
+     * 管理员
+     */
+    ADMIN
+}

+ 8 - 8
src/main/java/nju/seec/helper/enums/UserState.java

@@ -1,8 +1,8 @@
-package nju.seec.helper.enums;
-
-/**
- * @author cst
- */
-public enum UserState {
-    CHECKING, NORMAL, LOCKED
-}
+//package nju.seec.helper.enums;
+//
+///**
+// * @author cst
+// */
+//public enum UserState {
+//    CHECKING, NORMAL, LOCKED
+//}

+ 0 - 9
src/main/java/nju/seec/helper/enums/UserType.java

@@ -1,9 +0,0 @@
-package nju.seec.helper.enums;
-
-/**
- * @author cst
- */
-
-public enum UserType {
-    TEACHER, STUDENT, ADMIN
-}

+ 58 - 58
src/main/java/nju/seec/helper/service/AdminService.java

@@ -1,58 +1,58 @@
-package nju.seec.helper.service;
-
-import nju.seec.helper.aspect.auth.LoginUser;
-import nju.seec.helper.enums.UserState;
-import nju.seec.helper.enums.UserType;
-import nju.seec.helper.vo.AdminVO;
-import nju.seec.helper.vo.UserVO;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-
-/**
- * @author cst
- */
-public interface AdminService {
-    /**
-     * 用户名密码获取
-     *
-     * @param username
-     * @param password
-     * @return
-     */
-    AdminVO getAdminByUsernameAndPassword(String username, String password);
-
-    /**
-     * 获取用户列表
-     *
-     * @param type
-     * @param state
-     * @param key
-     * @param pageable
-     * @return
-     */
-    Page<UserVO> getUsers(UserType type, UserState state, String key, Pageable pageable);
-
-    /**
-     * 审核通过用户
-     *
-     * @param admin
-     * @param userId
-     */
-    void passUser(LoginUser admin, Long userId);
-
-    /**
-     * 封禁用户
-     *
-     * @param admin
-     * @param userId
-     */
-    void lockUser(LoginUser admin, Long userId);
-
-    /**
-     * 解封用户
-     *
-     * @param admin
-     * @param userId
-     */
-    void unlockUser(LoginUser admin, Long userId);
-}
+//package nju.seec.helper.service;
+//
+//import nju.seec.helper.aspect.auth.LoginUser;
+//import nju.seec.helper.enums.UserRole;
+//import nju.seec.helper.enums.UserState;
+//import nju.seec.helper.vo.AdminVO;
+//import nju.seec.helper.vo.UserVO;
+//import org.springframework.data.domain.Page;
+//import org.springframework.data.domain.Pageable;
+//
+///**
+// * @author cst
+// */
+//public interface AdminService {
+//    /**
+//     * 用户名密码获取
+//     *
+//     * @param username
+//     * @param password
+//     * @return
+//     */
+//    AdminVO getAdminByUsernameAndPassword(String username, String password);
+//
+//    /**
+//     * 获取用户列表
+//     *
+//     * @param role
+//     * @param state
+//     * @param key
+//     * @param pageable
+//     * @return
+//     */
+//    Page<UserVO> getUsers(UserRole role, UserState state, String key, Pageable pageable);
+//
+//    /**
+//     * 审核通过用户
+//     *
+//     * @param admin
+//     * @param userId
+//     */
+//    void passUser(LoginUser admin, Long userId);
+//
+//    /**
+//     * 封禁用户
+//     *
+//     * @param admin
+//     * @param userId
+//     */
+//    void lockUser(LoginUser admin, Long userId);
+//
+//    /**
+//     * 解封用户
+//     *
+//     * @param admin
+//     * @param userId
+//     */
+//    void unlockUser(LoginUser admin, Long userId);
+//}

+ 20 - 20
src/main/java/nju/seec/helper/service/CodeService.java

@@ -1,20 +1,20 @@
-package nju.seec.helper.service;
-
-/**
- * @author cst
- */
-public interface CodeService {
-    /**
-     * 发送邮箱验证码
-     *
-     * @param email
-     */
-    void sendEmailCode(String email);
-
-    /**
-     * 发送手机验证码
-     *
-     * @param phone
-     */
-    void sendPhoneCode(String phone);
-}
+//package nju.seec.helper.service;
+//
+///**
+// * @author cst
+// */
+//public interface CodeService {
+//    /**
+//     * 发送邮箱验证码
+//     *
+//     * @param email
+//     */
+//    void sendEmailCode(String email);
+//
+//    /**
+//     * 发送手机验证码
+//     *
+//     * @param phone
+//     */
+//    void sendPhoneCode(String phone);
+//}

+ 42 - 25
src/main/java/nju/seec/helper/service/UserService.java

@@ -1,46 +1,63 @@
 package nju.seec.helper.service;
 package nju.seec.helper.service;
 
 
-import nju.seec.helper.aspect.auth.LoginUser;
-import nju.seec.helper.dto.user.ResetPasswordDTO;
-import nju.seec.helper.dto.user.UserDTO;
+import nju.seec.helper.entity.User;
 import nju.seec.helper.vo.UserVO;
 import nju.seec.helper.vo.UserVO;
 
 
+import java.util.Optional;
+
 /**
 /**
  * @author cst
  * @author cst
  */
  */
 public interface UserService {
 public interface UserService {
-    /**
-     * 创建用户
-     *
-     * @param userDTO
-     * @return
-     */
-    UserVO createUser(UserDTO userDTO);
+//    /**
+//     * 创建用户
+//     *
+//     * @param userDTO
+//     * @return
+//     */
+//    UserVO createUser(UserDTO userDTO);
+//
+//    /**
+//     * 修改用户信息
+//     *
+//     * @param loginUser
+//     * @param userDTO
+//     * @return
+//     */
+//    UserVO modifyUser(LoginUser loginUser, UserDTO userDTO);
+//
+//    /**
+//     * 重设密码
+//     *
+//     * @param resetPasswordDTO
+//     */
+//    void resetPasswordByEmail(ResetPasswordDTO resetPasswordDTO);
+//
+//    /**
+//     * 根据邮箱和密码匹配用户
+//     *
+//     * @param email
+//     * @param password
+//     * @return
+//     */
+//    UserVO getUserByEmailAndPassword(String email, String password);
 
 
     /**
     /**
-     * 修改用户信息
+     * 与门户对接
      *
      *
-     * @param loginUser
-     * @param userDTO
+     * @param user
      * @return
      * @return
      */
      */
-    UserVO modifyUser(LoginUser loginUser, UserDTO userDTO);
-
-    /**
-     * 重设密码
-     *
-     * @param resetPasswordDTO
-     */
-    void resetPasswordByEmail(ResetPasswordDTO resetPasswordDTO);
+    User createOrUpdateUser(User user);
 
 
     /**
     /**
-     * 根据邮箱和密码匹配用户
+     * 根据电话或PID查询
      *
      *
-     * @param email
-     * @param password
+     * @param phone
+     * @param pid
      * @return
      * @return
      */
      */
-    UserVO getUserByEmailAndPassword(String email, String password);
+    Optional<User> getUserByPhoneOrPid(String phone, Long pid);
 
 
     /**
     /**
      * 根据ID获取用户信息
      * 根据ID获取用户信息

+ 86 - 86
src/main/java/nju/seec/helper/service/impl/AdminServiceImpl.java

@@ -1,86 +1,86 @@
-package nju.seec.helper.service.impl;
-
-import cn.hutool.crypto.SecureUtil;
-import nju.seec.helper.aspect.auth.LoginUser;
-import nju.seec.helper.dao.AdminDAO;
-import nju.seec.helper.dao.UserDAO;
-import nju.seec.helper.entity.User;
-import nju.seec.helper.enums.ExceptionType;
-import nju.seec.helper.enums.UserState;
-import nju.seec.helper.enums.UserType;
-import nju.seec.helper.exception.HelperException;
-import nju.seec.helper.service.AdminService;
-import nju.seec.helper.util.StringUtils;
-import nju.seec.helper.vo.AdminVO;
-import nju.seec.helper.vo.UserVO;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * @author cst
- */
-@Service
-public class AdminServiceImpl implements AdminService {
-    private final AdminDAO adminDAO;
-    private final UserDAO userDAO;
-
-    public AdminServiceImpl(AdminDAO adminDAO, UserDAO userDAO) {
-        this.adminDAO = adminDAO;
-        this.userDAO = userDAO;
-    }
-
-    @Transactional(readOnly = true)
-    @Override
-    public AdminVO getAdminByUsernameAndPassword(String username, String password) {
-        return adminDAO.findByUsernameAndPassword(username, SecureUtil.sha256(password))
-                .map(AdminVO::new)
-                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "用户名密码错误"));
-    }
-
-    @Transactional(readOnly = true)
-    @Override
-    public Page<UserVO> getUsers(UserType type, UserState state, String key, Pageable pageable) {
-        return findUsersByTypeAndStateAndKey(type, state, key, pageable).map(UserVO::new);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void passUser(LoginUser admin, Long userId) {
-        User user = userDAO.findUserById(userId);
-        if (user.getState() != UserState.CHECKING) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "该帐号暂时无法审核通过");
-        }
-        userDAO.save(user.setState(UserState.NORMAL));
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void lockUser(LoginUser admin, Long userId) {
-        userDAO.save(userDAO.findUserById(userId).setState(UserState.LOCKED));
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void unlockUser(LoginUser admin, Long userId) {
-        User user = userDAO.findUserById(userId);
-        if (user.getState() != UserState.LOCKED) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "该帐号暂时无法解封");
-        }
-        userDAO.save(user.setState(UserState.NORMAL));
-    }
-
-    private Page<User> findUsersByTypeAndStateAndKey(UserType userType, UserState userState, String key, Pageable pageable) {
-        final String keyPattern = StringUtils.keyPattern(key);
-
-        return userDAO.findAll(
-                (Specification<User>) (root, query, cb) -> cb.and(
-                        cb.equal(root.get("type").as(UserType.class), userType)
-                        , cb.equal(root.get("state").as(UserState.class), userState)
-                        , cb.or(cb.like(root.get("email"), keyPattern), cb.like(root.get("phone"), keyPattern), cb.like(root.get("name"), keyPattern))
-                )
-                , pageable);
-    }
-}
+//package nju.seec.helper.service.impl;
+//
+//import cn.hutool.crypto.SecureUtil;
+//import nju.seec.helper.aspect.auth.LoginUser;
+//import nju.seec.helper.dao.AdminDAO;
+//import nju.seec.helper.dao.UserDAO;
+//import nju.seec.helper.entity.User;
+//import nju.seec.helper.enums.ExceptionType;
+//import nju.seec.helper.enums.UserState;
+//import nju.seec.helper.enums.UserRole;
+//import nju.seec.helper.exception.HelperException;
+//import nju.seec.helper.service.AdminService;
+//import nju.seec.helper.util.StringUtils;
+//import nju.seec.helper.vo.AdminVO;
+//import nju.seec.helper.vo.UserVO;
+//import org.springframework.data.domain.Page;
+//import org.springframework.data.domain.Pageable;
+//import org.springframework.data.jpa.domain.Specification;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//
+///**
+// * @author cst
+// */
+//@Service
+//public class AdminServiceImpl implements AdminService {
+//    private final AdminDAO adminDAO;
+//    private final UserDAO userDAO;
+//
+//    public AdminServiceImpl(AdminDAO adminDAO, UserDAO userDAO) {
+//        this.adminDAO = adminDAO;
+//        this.userDAO = userDAO;
+//    }
+//
+//    @Transactional(readOnly = true)
+//    @Override
+//    public AdminVO getAdminByUsernameAndPassword(String username, String password) {
+//        return adminDAO.findByUsernameAndPassword(username, SecureUtil.sha256(password))
+//                .map(AdminVO::new)
+//                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "用户名密码错误"));
+//    }
+//
+//    @Transactional(readOnly = true)
+//    @Override
+//    public Page<UserVO> getUsers(UserRole role, UserState state, String key, Pageable pageable) {
+//        return findUsersByTypeAndStateAndKey(type, state, key, pageable).map(UserVO::new);
+//    }
+//
+//    @Transactional(rollbackFor = Exception.class)
+//    @Override
+//    public void passUser(LoginUser admin, Long userId) {
+//        User user = userDAO.findUserById(userId);
+//        if (user.getState() != UserState.CHECKING) {
+//            throw HelperException.of(ExceptionType.FORBIDDEN, "该帐号暂时无法审核通过");
+//        }
+//        userDAO.save(user.setState(UserState.NORMAL));
+//    }
+//
+//    @Transactional(rollbackFor = Exception.class)
+//    @Override
+//    public void lockUser(LoginUser admin, Long userId) {
+//        userDAO.save(userDAO.findUserById(userId).setState(UserState.LOCKED));
+//    }
+//
+//    @Transactional(rollbackFor = Exception.class)
+//    @Override
+//    public void unlockUser(LoginUser admin, Long userId) {
+//        User user = userDAO.findUserById(userId);
+//        if (user.getState() != UserState.LOCKED) {
+//            throw HelperException.of(ExceptionType.FORBIDDEN, "该帐号暂时无法解封");
+//        }
+//        userDAO.save(user.setState(UserState.NORMAL));
+//    }
+//
+//    private Page<User> findUsersByTypeAndStateAndKey(UserRole userRole, UserState userState, String key, Pageable pageable) {
+//        final String keyPattern = StringUtils.keyPattern(key);
+//
+//        return userDAO.findAll(
+//                (Specification<User>) (root, query, cb) -> cb.and(
+//                        cb.equal(root.get("type").as(UserRole.class), userRole)
+//                        , cb.equal(root.get("state").as(UserState.class), userState)
+//                        , cb.or(cb.like(root.get("email"), keyPattern), cb.like(root.get("phone"), keyPattern), cb.like(root.get("name"), keyPattern))
+//                )
+//                , pageable);
+//    }
+//}

+ 48 - 48
src/main/java/nju/seec/helper/service/impl/CodeServiceImpl.java

@@ -1,48 +1,48 @@
-package nju.seec.helper.service.impl;
-
-import nju.seec.helper.service.CodeService;
-import nju.seec.helper.util.Consts;
-import nju.seec.helper.util.MailUtils;
-import nju.seec.helper.util.cache.RedisCacheUtils;
-import nju.seec.helper.util.SmsUtils;
-import org.springframework.stereotype.Service;
-
-import java.util.Random;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author cst
- */
-@Service
-public class CodeServiceImpl implements CodeService {
-    private static final int MAIL_CODE_LIVING_MINUTES = 5;
-    private static final int PHONE_CODE_LIVING_MINUTES = 5;
-
-    private final MailUtils mailUtils;
-    private final SmsUtils smsUtils;
-    private final RedisCacheUtils cacheUtils;
-
-    public CodeServiceImpl(MailUtils mailUtils, SmsUtils smsUtils, RedisCacheUtils cacheUtils) {
-        this.mailUtils = mailUtils;
-        this.smsUtils = smsUtils;
-        this.cacheUtils = cacheUtils;
-    }
-
-    @Override
-    public void sendEmailCode(String email) {
-        String code = getSixBitsCode();
-        mailUtils.sendSimpleMailMessage(String.format("您的验证码:%s,%d分钟内有效,请勿泄漏于他人!", code, MAIL_CODE_LIVING_MINUTES), email);
-        cacheUtils.set(Consts.EMAIL_CACHE_NAME, email, code, MAIL_CODE_LIVING_MINUTES, TimeUnit.MINUTES);
-    }
-
-    private String getSixBitsCode() {
-        return String.valueOf(new Random().nextInt(900000) + 100000);
-    }
-
-    @Override
-    public void sendPhoneCode(String phone) {
-        String code = getSixBitsCode();
-        smsUtils.sendSmsCode(phone, code);
-        cacheUtils.set(Consts.PHONE_CACHE_NAME, phone, code, PHONE_CODE_LIVING_MINUTES, TimeUnit.MINUTES);
-    }
-}
+//package nju.seec.helper.service.impl;
+//
+//import nju.seec.helper.service.CodeService;
+//import nju.seec.helper.util.Consts;
+//import nju.seec.helper.util.MailUtils;
+//import nju.seec.helper.util.cache.RedisCacheUtils;
+//import nju.seec.helper.util.SmsUtils;
+//import org.springframework.stereotype.Service;
+//
+//import java.util.Random;
+//import java.util.concurrent.TimeUnit;
+//
+///**
+// * @author cst
+// */
+//@Service
+//public class CodeServiceImpl implements CodeService {
+//    private static final int MAIL_CODE_LIVING_MINUTES = 5;
+//    private static final int PHONE_CODE_LIVING_MINUTES = 5;
+//
+//    private final MailUtils mailUtils;
+//    private final SmsUtils smsUtils;
+//    private final RedisCacheUtils cacheUtils;
+//
+//    public CodeServiceImpl(MailUtils mailUtils, SmsUtils smsUtils, RedisCacheUtils cacheUtils) {
+//        this.mailUtils = mailUtils;
+//        this.smsUtils = smsUtils;
+//        this.cacheUtils = cacheUtils;
+//    }
+//
+//    @Override
+//    public void sendEmailCode(String email) {
+//        String code = getSixBitsCode();
+//        mailUtils.sendSimpleMailMessage(String.format("您的验证码:%s,%d分钟内有效,请勿泄漏于他人!", code, MAIL_CODE_LIVING_MINUTES), email);
+//        cacheUtils.set(Consts.EMAIL_CACHE_NAME, email, code, MAIL_CODE_LIVING_MINUTES, TimeUnit.MINUTES);
+//    }
+//
+//    private String getSixBitsCode() {
+//        return String.valueOf(new Random().nextInt(900000) + 100000);
+//    }
+//
+//    @Override
+//    public void sendPhoneCode(String phone) {
+//        String code = getSixBitsCode();
+//        smsUtils.sendSmsCode(phone, code);
+//        cacheUtils.set(Consts.PHONE_CACHE_NAME, phone, code, PHONE_CODE_LIVING_MINUTES, TimeUnit.MINUTES);
+//    }
+//}

+ 2 - 2
src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java

@@ -9,7 +9,7 @@ import nju.seec.helper.dto.course.CourseDTO;
 import nju.seec.helper.entity.Choose;
 import nju.seec.helper.entity.Choose;
 import nju.seec.helper.entity.Course;
 import nju.seec.helper.entity.Course;
 import nju.seec.helper.enums.ExceptionType;
 import nju.seec.helper.enums.ExceptionType;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.service.CourseService;
 import nju.seec.helper.service.CourseService;
 import nju.seec.helper.vo.CourseVO;
 import nju.seec.helper.vo.CourseVO;
@@ -163,7 +163,7 @@ public class CourseServiceImpl implements CourseService {
 
 
     @Override
     @Override
     public boolean existsAddAuth(LoginUser user, Course course) {
     public boolean existsAddAuth(LoginUser user, Course course) {
-        return user.getType() == UserType.TEACHER;
+        return user.getRole() == UserRole.TEACHER;
     }
     }
 
 
     @Override
     @Override

+ 2 - 2
src/main/java/nju/seec/helper/service/impl/QuestionServiceImpl.java

@@ -11,7 +11,7 @@ import nju.seec.helper.entity.QuestionRecord;
 import nju.seec.helper.entity.Quiz;
 import nju.seec.helper.entity.Quiz;
 import nju.seec.helper.enums.ExceptionType;
 import nju.seec.helper.enums.ExceptionType;
 import nju.seec.helper.enums.QuizState;
 import nju.seec.helper.enums.QuizState;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.service.QuestionService;
 import nju.seec.helper.service.QuestionService;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import nju.seec.helper.vo.question.BaseQuestionVO;
@@ -62,7 +62,7 @@ public class QuestionServiceImpl implements QuestionService {
         List<String> questionIds = quiz.getQuestions();
         List<String> questionIds = quiz.getQuestions();
         return bokQuestionApi.bokFindByIdIn(questionIds)
         return bokQuestionApi.bokFindByIdIn(questionIds)
                 .stream()
                 .stream()
-                .map(bokQuestion -> BaseQuestionVO.convertBokQuestionToVO(bokQuestion, quiz.getState() == QuizState.CLOSED || user.getType() == UserType.TEACHER))
+                .map(bokQuestion -> BaseQuestionVO.convertBokQuestionToVO(bokQuestion, quiz.getState() == QuizState.CLOSED || user.getRole() == UserRole.TEACHER))
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
     }
     }
 
 

+ 1 - 1
src/main/java/nju/seec/helper/service/impl/QuizServiceImpl.java

@@ -221,6 +221,6 @@ public class QuizServiceImpl implements QuizService {
     @Override
     @Override
     public boolean existsGetAuth(LoginUser user, Quiz quiz) {
     public boolean existsGetAuth(LoginUser user, Quiz quiz) {
         return quiz.getState() != QuizState.NOT_STARTED
         return quiz.getState() != QuizState.NOT_STARTED
-                || user.getType() == UserType.TEACHER;
+                || user.getRole() == UserRole.TEACHER;
     }
     }
 }
 }

+ 1 - 1
src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java

@@ -226,7 +226,7 @@ public class SlideServiceImpl implements SlideService {
             throw HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该课程的课件");
             throw HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该课程的课件");
         }
         }
 
 
-        switch (user.getType()) {
+        switch (user.getRole()) {
             case TEACHER:
             case TEACHER:
                 return slideDAO.findByCourseAndNameContains(course, key, pageable).map(SlideVO::new);
                 return slideDAO.findByCourseAndNameContains(course, key, pageable).map(SlideVO::new);
             case STUDENT:
             case STUDENT:

+ 88 - 82
src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java

@@ -1,96 +1,91 @@
 package nju.seec.helper.service.impl;
 package nju.seec.helper.service.impl;
 
 
-import cn.hutool.crypto.SecureUtil;
-import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.dao.UserDAO;
 import nju.seec.helper.dao.UserDAO;
-import nju.seec.helper.dto.user.ResetPasswordDTO;
-import nju.seec.helper.dto.user.UserDTO;
 import nju.seec.helper.entity.User;
 import nju.seec.helper.entity.User;
-import nju.seec.helper.enums.ExceptionType;
-import nju.seec.helper.enums.UserState;
-import nju.seec.helper.enums.UserType;
-import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.service.UserService;
 import nju.seec.helper.service.UserService;
-import nju.seec.helper.util.Consts;
-import nju.seec.helper.util.cache.RedisCacheUtils;
 import nju.seec.helper.vo.UserVO;
 import nju.seec.helper.vo.UserVO;
+import org.springframework.data.util.Optionals;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.util.Optional;
+
 /**
 /**
  * @author cst
  * @author cst
  */
  */
 @Service
 @Service
 public class UserServiceImpl implements UserService {
 public class UserServiceImpl implements UserService {
-    private final RedisCacheUtils cacheUtils;
+    //    private final RedisCacheUtils cacheUtils;
     private final UserDAO userDAO;
     private final UserDAO userDAO;
 
 
-    public UserServiceImpl(UserDAO userDAO, RedisCacheUtils cacheUtils) {
+    public UserServiceImpl(UserDAO userDAO
+//            , RedisCacheUtils cacheUtils
+    ) {
         this.userDAO = userDAO;
         this.userDAO = userDAO;
-        this.cacheUtils = cacheUtils;
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public UserVO createUser(UserDTO userDTO) {
-        checkSameEmail(userDTO.getEmail());
-        checkSamePhone(userDTO.getPhone());
-
-        String email = userDTO.getEmail();
-        if (!userDTO.getEmailCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, email))) {
-            throw HelperException.of(ExceptionType.NOT_FOUND, "邮箱或验证码错误");
-        }
-
-        String phone = userDTO.getPhone();
-        if (!userDTO.getPhoneCode().equals(cacheUtils.get(Consts.PHONE_CACHE_NAME, phone))) {
-            throw HelperException.of(ExceptionType.NOT_FOUND, "手机号或验证码错误");
-        }
-
-        User user = userDAO.save(new User()
-                .setName(userDTO.getName())
-                .setEmail(userDTO.getEmail())
-                .setPhone(userDTO.getPhone())
-                .setPassword(SecureUtil.sha256(userDTO.getPassword()))
-                .setType(userDTO.getType())
-                .setState(userDTO.getType() == UserType.TEACHER ? UserState.CHECKING : UserState.NORMAL));
-
-        cacheUtils.remove(Consts.EMAIL_CACHE_NAME, email);
-        cacheUtils.remove(Consts.PHONE_CACHE_NAME, phone);
-        return new UserVO(user);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public UserVO modifyUser(LoginUser loginUser, UserDTO userDTO) {
-        User user = userDAO.findUserById(loginUser.getId());
-        user.setName(userDTO.getName());
-        user = userDAO.save(user);
-        return new UserVO(user);
+//        this.cacheUtils = cacheUtils;
     }
     }
 
 
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void resetPasswordByEmail(ResetPasswordDTO resetPasswordDTO) {
-        User user = userDAO.findByEmail(resetPasswordDTO.getUsername())
-                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "该邮箱未在系统中注册"));
-
-        if (!resetPasswordDTO.getCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, resetPasswordDTO.getUsername()))) {
-            throw HelperException.of(ExceptionType.NOT_FOUND, "邮箱或验证码错误");
-        }
-
-        user.setPassword(SecureUtil.sha256(resetPasswordDTO.getPassword()));
-        userDAO.save(user);
-        cacheUtils.remove(Consts.EMAIL_CACHE_NAME, resetPasswordDTO.getUsername());
-    }
-
-    @Transactional(readOnly = true)
-    @Override
-    public UserVO getUserByEmailAndPassword(String email, String password) {
-        return userDAO
-                .findByEmailAndPassword(email, SecureUtil.sha256(password))
-                .map(UserVO::new)
-                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "邮箱或密码错误"));
-    }
+//    @Transactional(rollbackFor = Exception.class)
+//    @Override
+//    public UserVO createUser(UserDTO userDTO) {
+//        checkSameEmail(userDTO.getEmail());
+//        checkSamePhone(userDTO.getPhone());
+//
+//        String email = userDTO.getEmail();
+//        if (!userDTO.getEmailCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, email))) {
+//            throw HelperException.of(ExceptionType.NOT_FOUND, "邮箱或验证码错误");
+//        }
+//
+//        String phone = userDTO.getPhone();
+//        if (!userDTO.getPhoneCode().equals(cacheUtils.get(Consts.PHONE_CACHE_NAME, phone))) {
+//            throw HelperException.of(ExceptionType.NOT_FOUND, "手机号或验证码错误");
+//        }
+//
+//        User user = userDAO.save(new User()
+//                .setName(userDTO.getName())
+//                .setEmail(userDTO.getEmail())
+//                .setPhone(userDTO.getPhone())
+//                .setPassword(SecureUtil.sha256(userDTO.getPassword()))
+//                .setType(userDTO.getType())
+//                .setState(userDTO.getType() == UserRole.TEACHER ? UserState.CHECKING : UserState.NORMAL));
+//
+//        cacheUtils.remove(Consts.EMAIL_CACHE_NAME, email);
+//        cacheUtils.remove(Consts.PHONE_CACHE_NAME, phone);
+//        return new UserVO(user);
+//    }
+//
+//    @Transactional(rollbackFor = Exception.class)
+//    @Override
+//    public UserVO modifyUser(LoginUser loginUser, UserDTO userDTO) {
+//        User user = userDAO.findUserById(loginUser.getId());
+//        user.setName(userDTO.getName());
+//        user = userDAO.save(user);
+//        return new UserVO(user);
+//    }
+//
+//    @Transactional(rollbackFor = Exception.class)
+//    @Override
+//    public void resetPasswordByEmail(ResetPasswordDTO resetPasswordDTO) {
+//        User user = userDAO.findByEmail(resetPasswordDTO.getUsername())
+//                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "该邮箱未在系统中注册"));
+//
+//        if (!resetPasswordDTO.getCode().equals(cacheUtils.get(Consts.EMAIL_CACHE_NAME, resetPasswordDTO.getUsername()))) {
+//            throw HelperException.of(ExceptionType.NOT_FOUND, "邮箱或验证码错误");
+//        }
+//
+//        user.setPassword(SecureUtil.sha256(resetPasswordDTO.getPassword()));
+//        userDAO.save(user);
+//        cacheUtils.remove(Consts.EMAIL_CACHE_NAME, resetPasswordDTO.getUsername());
+//    }
+//
+//    @Transactional(readOnly = true)
+//    @Override
+//    public UserVO getUserByEmailAndPassword(String email, String password) {
+//        return userDAO
+//                .findByEmailAndPassword(email, SecureUtil.sha256(password))
+//                .map(UserVO::new)
+//                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "邮箱或密码错误"));
+//    }
 
 
     @Transactional(readOnly = true)
     @Transactional(readOnly = true)
     @Override
     @Override
@@ -98,15 +93,26 @@ public class UserServiceImpl implements UserService {
         return new UserVO(userDAO.findUserById(userId));
         return new UserVO(userDAO.findUserById(userId));
     }
     }
 
 
-    private void checkSameEmail(String email) {
-        if (userDAO.existsByEmail(email)) {
-            throw HelperException.of(ExceptionType.CONFLICT, "该邮箱已注册");
-        }
+    @Override
+    public Optional<User> getUserByPhoneOrPid(String phone, Long pid) {
+        return Optionals.firstNonEmpty(() -> userDAO.findByPhone(phone), () -> userDAO.findByPid(pid));
     }
     }
 
 
-    private void checkSamePhone(String phone) {
-        if (userDAO.existsByPhone(phone)) {
-            throw HelperException.of(ExceptionType.CONFLICT, "该手机号已注册");
-        }
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public User createOrUpdateUser(User user) {
+        return userDAO.save(user);
     }
     }
+
+    //    private void checkSameEmail(String email) {
+//        if (userDAO.existsByEmail(email)) {
+//            throw HelperException.of(ExceptionType.CONFLICT, "该邮箱已注册");
+//        }
+//    }
+//
+//    private void checkSamePhone(String phone) {
+//        if (userDAO.existsByPhone(phone)) {
+//            throw HelperException.of(ExceptionType.CONFLICT, "该手机号已注册");
+//        }
+//    }
 }
 }

+ 3 - 3
src/main/java/nju/seec/helper/util/Consts.java

@@ -6,7 +6,7 @@ package nju.seec.helper.util;
 public class Consts {
 public class Consts {
     public static final String SYS_NAME = "helper";
     public static final String SYS_NAME = "helper";
 
 
-    public static final String SESSION_USER_NAME = SYS_NAME + "_user";
-    public static final String EMAIL_CACHE_NAME = SYS_NAME + "_email";
-    public static final String PHONE_CACHE_NAME = SYS_NAME + "_phone";
+//    public static final String SESSION_USER_NAME = SYS_NAME + "_user";
+//    public static final String EMAIL_CACHE_NAME = SYS_NAME + "_email";
+//    public static final String PHONE_CACHE_NAME = SYS_NAME + "_phone";
 }
 }

+ 32 - 32
src/main/java/nju/seec/helper/util/MailUtils.java

@@ -1,32 +1,32 @@
-package nju.seec.helper.util;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.mail.SimpleMailMessage;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.stereotype.Component;
-
-/**
- * @author cst
- */
-@Data
-@Component
-@ConfigurationProperties("helper.mail")
-public class MailUtils {
-    private String from;
-    private String subject;
-    private final JavaMailSender mailSender;
-
-    public MailUtils(JavaMailSender mailSender) {
-        this.mailSender = mailSender;
-    }
-
-    public void sendSimpleMailMessage(String text, String... to) {
-        SimpleMailMessage message = new SimpleMailMessage();
-        message.setFrom(from);
-        message.setTo(to);
-        message.setSubject(subject);
-        message.setText(text);
-        mailSender.send(message);
-    }
-}
+//package nju.seec.helper.util;
+//
+//import lombok.Data;
+//import org.springframework.boot.context.properties.ConfigurationProperties;
+//import org.springframework.mail.SimpleMailMessage;
+//import org.springframework.mail.javamail.JavaMailSender;
+//import org.springframework.stereotype.Component;
+//
+///**
+// * @author cst
+// */
+//@Data
+//@Component
+//@ConfigurationProperties("helper.mail")
+//public class MailUtils {
+//    private String from;
+//    private String subject;
+//    private final JavaMailSender mailSender;
+//
+//    public MailUtils(JavaMailSender mailSender) {
+//        this.mailSender = mailSender;
+//    }
+//
+//    public void sendSimpleMailMessage(String text, String... to) {
+//        SimpleMailMessage message = new SimpleMailMessage();
+//        message.setFrom(from);
+//        message.setTo(to);
+//        message.setSubject(subject);
+//        message.setText(text);
+//        mailSender.send(message);
+//    }
+//}

+ 65 - 65
src/main/java/nju/seec/helper/util/SmsUtils.java

@@ -1,65 +1,65 @@
-package nju.seec.helper.util;
-
-import com.aliyuncs.CommonRequest;
-import com.aliyuncs.CommonResponse;
-import com.aliyuncs.DefaultAcsClient;
-import com.aliyuncs.IAcsClient;
-import com.aliyuncs.exceptions.ClientException;
-import com.aliyuncs.http.MethodType;
-import com.aliyuncs.profile.DefaultProfile;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import nju.seec.helper.enums.ExceptionType;
-import nju.seec.helper.exception.HelperException;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * @author cst
- */
-@Component
-@Slf4j
-@Data
-@ConfigurationProperties("aliyun.sms")
-public class SmsUtils {
-    private static final String OK = "OK";
-
-    private String accessKeyId;
-    private String accessSecret;
-    private String signName;
-    private String templateCode;
-
-    public void sendSmsCode(String to, String code) {
-        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
-        IAcsClient client = new DefaultAcsClient(profile);
-
-        CommonRequest request = new CommonRequest();
-        request.setMethod(MethodType.POST);
-        request.setDomain("dysmsapi.aliyuncs.com");
-        request.setVersion("2017-05-25");
-        request.setAction("SendSms");
-        request.putQueryParameter("RegionId", "cn-hangzhou");
-        request.putQueryParameter("PhoneNumbers", to);
-        request.putQueryParameter("SignName", signName);
-        request.putQueryParameter("TemplateCode", templateCode);
-        request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}");
-        try {
-            CommonResponse response = client.getCommonResponse(request);
-            SendSmsResult sendSmsResult = JsonUtils.fromJson(response.getData(), SendSmsResult.class);
-            if (!OK.equals(sendSmsResult.Code)) {
-                log.error(sendSmsResult.Message);
-                throw HelperException.of(ExceptionType.ERROR, "短信验证码发送失败");
-            }
-        } catch (ClientException e) {
-            log.error(e.getErrCode());
-        }
-    }
-
-    @Data
-    public static class SendSmsResult {
-        private String Message;
-        private String RequestId;
-        private String BizId;
-        private String Code;
-    }
-}
+//package nju.seec.helper.util;
+//
+//import com.aliyuncs.CommonRequest;
+//import com.aliyuncs.CommonResponse;
+//import com.aliyuncs.DefaultAcsClient;
+//import com.aliyuncs.IAcsClient;
+//import com.aliyuncs.exceptions.ClientException;
+//import com.aliyuncs.http.MethodType;
+//import com.aliyuncs.profile.DefaultProfile;
+//import lombok.Data;
+//import lombok.extern.slf4j.Slf4j;
+//import nju.seec.helper.enums.ExceptionType;
+//import nju.seec.helper.exception.HelperException;
+//import org.springframework.boot.context.properties.ConfigurationProperties;
+//import org.springframework.stereotype.Component;
+//
+///**
+// * @author cst
+// */
+//@Component
+//@Slf4j
+//@Data
+//@ConfigurationProperties("aliyun.sms")
+//public class SmsUtils {
+//    private static final String OK = "OK";
+//
+//    private String accessKeyId;
+//    private String accessSecret;
+//    private String signName;
+//    private String templateCode;
+//
+//    public void sendSmsCode(String to, String code) {
+//        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
+//        IAcsClient client = new DefaultAcsClient(profile);
+//
+//        CommonRequest request = new CommonRequest();
+//        request.setMethod(MethodType.POST);
+//        request.setDomain("dysmsapi.aliyuncs.com");
+//        request.setVersion("2017-05-25");
+//        request.setAction("SendSms");
+//        request.putQueryParameter("RegionId", "cn-hangzhou");
+//        request.putQueryParameter("PhoneNumbers", to);
+//        request.putQueryParameter("SignName", signName);
+//        request.putQueryParameter("TemplateCode", templateCode);
+//        request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}");
+//        try {
+//            CommonResponse response = client.getCommonResponse(request);
+//            SendSmsResult sendSmsResult = JsonUtils.fromJson(response.getData(), SendSmsResult.class);
+//            if (!OK.equals(sendSmsResult.Code)) {
+//                log.error(sendSmsResult.Message);
+//                throw HelperException.of(ExceptionType.ERROR, "短信验证码发送失败");
+//            }
+//        } catch (ClientException e) {
+//            log.error(e.getErrCode());
+//        }
+//    }
+//
+//    @Data
+//    private static class SendSmsResult {
+//        private String Message;
+//        private String RequestId;
+//        private String BizId;
+//        private String Code;
+//    }
+//}

+ 19 - 19
src/main/java/nju/seec/helper/vo/AdminVO.java

@@ -1,19 +1,19 @@
-package nju.seec.helper.vo;
-
-import lombok.Data;
-import lombok.NonNull;
-import nju.seec.helper.entity.Admin;
-
-/**
- * @author cst
- */
-@Data
-public class AdminVO {
-    private Long id;
-    private String username;
-
-    public AdminVO(@NonNull Admin admin) {
-        this.id = admin.getId();
-        this.username = admin.getUsername();
-    }
-}
+//package nju.seec.helper.vo;
+//
+//import lombok.Data;
+//import lombok.NonNull;
+//import nju.seec.helper.entity.Admin;
+//
+///**
+// * @author cst
+// */
+//@Data
+//public class AdminVO {
+//    private Long id;
+//    private String username;
+//
+//    public AdminVO(@NonNull Admin admin) {
+//        this.id = admin.getId();
+//        this.username = admin.getUsername();
+//    }
+//}

+ 3 - 3
src/main/java/nju/seec/helper/vo/CommentVO.java

@@ -3,7 +3,7 @@ package nju.seec.helper.vo;
 import lombok.Data;
 import lombok.Data;
 import lombok.NonNull;
 import lombok.NonNull;
 import nju.seec.helper.entity.Comment;
 import nju.seec.helper.entity.Comment;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
@@ -29,7 +29,7 @@ public class CommentVO {
     private String content;
     private String content;
     private Long userId;
     private Long userId;
     private String userName;
     private String userName;
-    private UserType userType;
+    private UserRole userRole;
     private LocalDateTime createAt;
     private LocalDateTime createAt;
 
 
     private ReplyVO reply;
     private ReplyVO reply;
@@ -45,7 +45,7 @@ public class CommentVO {
         this.content = comment.getContent();
         this.content = comment.getContent();
         this.userId = comment.getUser().getId();
         this.userId = comment.getUser().getId();
         this.userName = comment.getUser().getName();
         this.userName = comment.getUser().getName();
-        this.userType = comment.getUser().getType();
+        this.userRole = comment.getUser().getRole();
         this.createAt = comment.getCreateAt();
         this.createAt = comment.getCreateAt();
         this.reply = comment.getReply() == null ? null : new ReplyVO(comment.getReply());
         this.reply = comment.getReply() == null ? null : new ReplyVO(comment.getReply());
         this.show = comment.getShow();
         this.show = comment.getShow();

+ 5 - 6
src/main/java/nju/seec/helper/vo/UserVO.java

@@ -3,8 +3,7 @@ package nju.seec.helper.vo;
 import lombok.Data;
 import lombok.Data;
 import lombok.NonNull;
 import lombok.NonNull;
 import nju.seec.helper.entity.User;
 import nju.seec.helper.entity.User;
-import nju.seec.helper.enums.UserState;
-import nju.seec.helper.enums.UserType;
+import nju.seec.helper.enums.UserRole;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
@@ -17,19 +16,19 @@ public class UserVO {
     private String name;
     private String name;
     private String email;
     private String email;
     private String phone;
     private String phone;
-    private UserType type;
+    private UserRole role;
     private LocalDateTime createAt;
     private LocalDateTime createAt;
 
 
-    private UserState state;
+//    private UserState state;
 
 
     public UserVO(@NonNull User user) {
     public UserVO(@NonNull User user) {
         this.id = user.getId();
         this.id = user.getId();
         this.name = user.getName();
         this.name = user.getName();
         this.email = user.getEmail();
         this.email = user.getEmail();
         this.phone = user.getPhone();
         this.phone = user.getPhone();
-        this.type = user.getType();
+        this.role = user.getRole();
         this.createAt = user.getCreateAt();
         this.createAt = user.getCreateAt();
 
 
-        this.state = user.getState();
+//        this.state = user.getState();
     }
     }
 }
 }

+ 2 - 0
src/main/resources/application-deploy.yml

@@ -66,6 +66,8 @@ guavaCache:
   maximumSize: 1000
   maximumSize: 1000
   expireAfterAccessInSeconds: 0
   expireAfterAccessInSeconds: 0
   expireAfterWriteInSeconds: 600
   expireAfterWriteInSeconds: 600
+jwt:
+  secret: SEEC-1919810-OIDC-114514
 # 自定义数据
 # 自定义数据
 helper:
 helper:
   mail:
   mail:

+ 2 - 0
src/main/resources/application-dev.yml

@@ -66,6 +66,8 @@ guavaCache:
   maximumSize: 1000
   maximumSize: 1000
   expireAfterAccessInSeconds: 0
   expireAfterAccessInSeconds: 0
   expireAfterWriteInSeconds: 600
   expireAfterWriteInSeconds: 600
+jwt:
+  secret: SEEC-1919810-OIDC-114514
 # 自定义数据
 # 自定义数据
 helper:
 helper:
   mail:
   mail:

+ 3 - 3
src/main/resources/application.yml

@@ -1,3 +1,3 @@
-spring:
-  profiles:
-    active: dev
+#spring:
+#  profiles:
+#    active: dev

+ 4 - 12
src/main/resources/update.sql

@@ -1,13 +1,5 @@
-update user
-set password = sha2(from_base64(password), 256);
+alter table user
+    change type role varchar(255) not null;
 
 
-update course
-set code = from_base64(code);
-
-update admin
-set password = sha2(from_base64(password), 256);
-
-alter table comment
-    add index comment_slide_page_user (slide_id, page_number, user_id);
-
-drop index slide_page_top on comment;
+alter table user
+    drop column state;