UserController.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package com.uas.kanban.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.uas.kanban.annotation.NotEmpty;
  4. import com.uas.kanban.base.BaseController;
  5. import com.uas.kanban.exception.OperationException;
  6. import com.uas.kanban.model.RememberKey;
  7. import com.uas.kanban.model.User;
  8. import com.uas.kanban.service.RememberKeyService;
  9. import com.uas.kanban.service.UserService;
  10. import com.uas.kanban.support.SessionHelper;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Controller;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.ResponseBody;
  15. import javax.servlet.http.Cookie;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.util.Arrays;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. /**
  22. * 用户
  23. *
  24. * @author sunyj
  25. * @since 2017年9月1日 下午4:42:10
  26. */
  27. @Controller
  28. @RequestMapping("/user")
  29. public class UserController extends BaseController<User> {
  30. @Autowired
  31. private UserService userService;
  32. @Autowired
  33. private RememberKeyService rememberKeyService;
  34. @Autowired
  35. private SessionHelper sessionHelper;
  36. /**
  37. * 登陆
  38. *
  39. * @param name 名称
  40. * @param password 密码
  41. * @param request request
  42. * @param response response
  43. * @return 登陆信息
  44. * <table border=1 cellpadding=5 cellspacing=0 summary="Fields and types">
  45. * <tr>
  46. * <th>Key</th>
  47. * <th>Value</th>
  48. * </tr>
  49. * <tr>
  50. * <td>code</td>
  51. * <td>用户 code</td>
  52. * </tr>
  53. * <tr>
  54. * <td>name</td>
  55. * <td>用户名称</td>
  56. * </tr>
  57. * <tr>
  58. * <td>role</td>
  59. * <td>用户角色</td>
  60. * </tr>
  61. * <tr>
  62. * <td>key</td>
  63. * <td>生成的 key</td>
  64. * </tr>
  65. * </table>
  66. */
  67. @RequestMapping("/login")
  68. @ResponseBody
  69. public Map<String, Object> login(@NotEmpty("name") String name, @NotEmpty("password") String password,
  70. HttpServletRequest request, HttpServletResponse response) {
  71. User user = userService.login(name, password);
  72. if (user != null) {
  73. sessionHelper.saveSession(request, user);
  74. String userCode = user.codeNotEmpty();
  75. RememberKey rememberKey = rememberKeyService.generate(userCode);
  76. // 生成的 key 保存到 cookie 里
  77. Integer maxInactiveInterval = rememberKey.getMaxInactiveInterval();
  78. addCookie("code", userCode, maxInactiveInterval, response);
  79. addCookie("key", rememberKey.getKey(), maxInactiveInterval, response);
  80. Map<String, Object> map = new HashMap<>();
  81. map.put("name", name);
  82. map.put("role", user.getRole());
  83. return map;
  84. }
  85. return null;
  86. }
  87. /**
  88. * 添加 cookie
  89. *
  90. * @param name cookie 名
  91. * @param value cookie 值
  92. * @param maxAge 有效时间(秒)
  93. * @param response response
  94. */
  95. private void addCookie(String name, String value, Integer maxAge, HttpServletResponse response) {
  96. Cookie cookie = new Cookie(name, value);
  97. cookie.setMaxAge(maxAge);
  98. cookie.setPath("/");
  99. response.addCookie(cookie);
  100. }
  101. /**
  102. * 退出登陆
  103. *
  104. * @param request request
  105. * @return 是否成功登陆
  106. * @throws OperationException 并非登陆状态
  107. */
  108. @RequestMapping("/logout")
  109. @ResponseBody
  110. public boolean logout(HttpServletRequest request) throws OperationException {
  111. User user = sessionHelper.readSession(request);
  112. if (user != null) {
  113. sessionHelper.clearSession(request);
  114. rememberKeyService.clearOldKey(user.codeNotEmpty());
  115. return true;
  116. }
  117. throw new OperationException("并非登陆状态");
  118. }
  119. /**
  120. * 重置密码
  121. *
  122. * @param password 旧密码
  123. * @param newPassword 新密码
  124. * @param request request
  125. * @return 是否重置成功
  126. */
  127. @RequestMapping("/resetPwd")
  128. @ResponseBody
  129. public boolean resetPwd(@NotEmpty("password") String password, @NotEmpty("newPassword") String newPassword,
  130. HttpServletRequest request) {
  131. return userService.resetPassword(password, newPassword);
  132. }
  133. /**
  134. * 初始化管理员
  135. *
  136. * @param name 名称
  137. * @param password 密码
  138. * @param request request
  139. * @return 账户信息
  140. */
  141. @RequestMapping("/initAdmin")
  142. @ResponseBody
  143. public User initAdmin(@NotEmpty("name") String name, @NotEmpty("password") String password, HttpServletRequest request) throws OperationException {
  144. User user = new User();
  145. user.setName(name);
  146. user.setPassword(password);
  147. user.setRole(User.Role.Admin);
  148. return save(JSONObject.toJSONString(user), request);
  149. }
  150. /**
  151. * 为指定用户分配面板
  152. *
  153. * @param userCode 用户 code
  154. * @param panelCodes 面板 code
  155. * @param request request
  156. * @return 分配成功
  157. */
  158. @RequestMapping("/assignPanel")
  159. @ResponseBody
  160. public boolean assignPanel(@NotEmpty("userCode") String userCode, String[] panelCodes, HttpServletRequest request) {
  161. userService.assignPanel(userCode, panelCodes == null ? null : Arrays.asList(panelCodes));
  162. return true;
  163. }
  164. }