UserController.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package nju.seec.helper.controller;
  2. import nju.seec.helper.aspect.auth.Auth;
  3. import nju.seec.helper.controller.response.EmptyResponse;
  4. import nju.seec.helper.controller.response.ResourceResponse;
  5. import nju.seec.helper.dto.LoginDTO;
  6. import nju.seec.helper.dto.LoginUser;
  7. import nju.seec.helper.dto.RegisterDTO;
  8. import nju.seec.helper.service.UserService;
  9. import nju.seec.helper.util.Consts;
  10. import nju.seec.helper.util.enums.UserType;
  11. import nju.seec.helper.vo.UserVO;
  12. import org.springframework.web.bind.annotation.*;
  13. import javax.servlet.http.HttpSession;
  14. import javax.validation.Valid;
  15. /**
  16. * 用户
  17. *
  18. * @author cst
  19. */
  20. @RestController
  21. @RequestMapping("/api/user")
  22. public class UserController {
  23. private final UserService userService;
  24. public UserController(UserService userService) {
  25. this.userService = userService;
  26. }
  27. /**
  28. * 注册
  29. */
  30. @PostMapping("/register")
  31. public ResourceResponse<UserVO> register(@Valid @RequestBody RegisterDTO registerDTO) {
  32. UserVO userVO = userService.createUser(registerDTO);
  33. return ResourceResponse.of(userVO);
  34. }
  35. /**
  36. * 邮箱登录
  37. */
  38. @PostMapping("/login/email")
  39. public ResourceResponse<UserVO> emailLogin(@Valid @RequestBody LoginDTO loginDTO,
  40. HttpSession session) {
  41. UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
  42. LoginUser user = new LoginUser();
  43. user.setId(userVO.getId());
  44. user.setName(userVO.getName());
  45. user.setType(userVO.getType());
  46. session.setAttribute(Consts.SESSION_USER_NAME, user);
  47. // 20分钟有效期
  48. session.setMaxInactiveInterval(1200);
  49. return ResourceResponse.of(userVO);
  50. }
  51. /**
  52. * 登出
  53. */
  54. @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "登出")
  55. @PostMapping("/logout")
  56. public EmptyResponse logout(HttpSession session) {
  57. session.removeAttribute(Consts.SESSION_USER_NAME);
  58. return EmptyResponse.getInstance();
  59. }
  60. /**
  61. * 获取自身用户信息
  62. */
  63. @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取自身用户信息")
  64. @GetMapping
  65. public ResourceResponse<UserVO> getUserInfo(LoginUser user) {
  66. UserVO userVO = userService.getUserById(user.getId());
  67. return ResourceResponse.of(userVO);
  68. }
  69. }