UserController.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.izouma.jmrh.web;
  2. import com.izouma.jmrh.config.Constants;
  3. import com.izouma.jmrh.domain.User;
  4. import com.izouma.jmrh.dto.PageQuery;
  5. import com.izouma.jmrh.exception.AuthenticationException;
  6. import com.izouma.jmrh.exception.BusinessException;
  7. import com.izouma.jmrh.repo.UserRepo;
  8. import com.izouma.jmrh.security.Authority;
  9. import com.izouma.jmrh.security.JwtTokenUtil;
  10. import com.izouma.jmrh.security.JwtUserFactory;
  11. import com.izouma.jmrh.service.UserService;
  12. import com.izouma.jmrh.service.sms.SmsService;
  13. import com.izouma.jmrh.utils.ObjUtils;
  14. import com.izouma.jmrh.utils.SecurityUtils;
  15. import com.izouma.jmrh.utils.excel.ExcelUtils;
  16. import io.swagger.annotations.ApiOperation;
  17. import lombok.AllArgsConstructor;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.data.domain.Page;
  20. import org.springframework.security.access.prepost.PreAuthorize;
  21. import org.springframework.security.authentication.AuthenticationManager;
  22. import org.springframework.security.authentication.BadCredentialsException;
  23. import org.springframework.security.authentication.DisabledException;
  24. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  25. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  26. import org.springframework.web.bind.annotation.*;
  27. import javax.servlet.http.HttpServletResponse;
  28. import java.io.IOException;
  29. import java.util.Collections;
  30. import java.util.List;
  31. import java.util.Objects;
  32. @AllArgsConstructor
  33. @RestController
  34. @RequestMapping("/user")
  35. @Slf4j
  36. public class UserController extends BaseController {
  37. private UserRepo userRepo;
  38. private UserService userService;
  39. private JwtTokenUtil jwtTokenUtil;
  40. private SmsService smsService;
  41. private AuthenticationManager authenticationManager;
  42. @PostMapping("/register")
  43. public User register(@RequestParam String username,
  44. @RequestParam String password /*,
  45. @RequestParam String phone,
  46. @RequestParam String code*/) /*throws SmsService.SmsVerifyException */ {
  47. /* smsService.verify(phone, code);*/
  48. User user = User.builder()
  49. .username(username)
  50. .nickname(username)
  51. .avatar(Constants.DEFAULT_AVATAR)
  52. .password(new BCryptPasswordEncoder().encode(password))
  53. .enabled(true)
  54. /* .phone(phone)*/
  55. .authorities(Collections.singleton(new Authority(Authority.NAMES.ROLE_USER.name())))
  56. .build();
  57. return userRepo.save(user);
  58. }
  59. @PreAuthorize("hasRole('ADMIN')")
  60. @PostMapping("/save")
  61. public User save(@RequestBody User user) {
  62. if (user.getId() != null) {
  63. User orig = userRepo.findById(user.getId()).orElseThrow(new BusinessException("无记录"));
  64. ObjUtils.merge(orig, user);
  65. return userRepo.save(orig);
  66. }
  67. return userRepo.save(user);
  68. }
  69. @PreAuthorize("hasRole('ADMIN')")
  70. @PostMapping("/del")
  71. public void save(@RequestParam Long id) {
  72. userRepo.deleteById(id);
  73. }
  74. /*
  75. * 找回密码
  76. * */
  77. @PostMapping("/updatePassWord")
  78. public void updatePassWord(@RequestParam String mail, @RequestParam String code, @RequestParam String password) {
  79. userService.updatePassWord(mail, code, password);
  80. }
  81. /*
  82. * 修改密码
  83. * */
  84. @PostMapping("/updatePassWordTo")
  85. public void updatePassWordTo(@RequestParam(name = "username") String username, @RequestParam(name = "password") String password,
  86. @RequestParam(name = "passWordTo") String passWordTo) {
  87. //smsService.verify(user.getPhone(), code);
  88. try {
  89. authenticate(username, password);
  90. User user = userRepo.findByUsername(username);
  91. if (user == null) {
  92. throw new BusinessException("用户不存在,请先注册");
  93. }
  94. user.setPassword(new BCryptPasswordEncoder().encode(passWordTo));
  95. userRepo.updatePassword(user);
  96. } catch (Exception e) {
  97. log.error("loginByUserPwd", e);
  98. throw new AuthenticationException("密码错误", e);
  99. }
  100. }
  101. /**
  102. * Authenticates the user. If something is wrong, an {@link AuthenticationException} will be thrown
  103. */
  104. private void authenticate(String username, String password) {
  105. Objects.requireNonNull(username);
  106. Objects.requireNonNull(password);
  107. try {
  108. authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
  109. } catch (DisabledException e) {
  110. throw new AuthenticationException("User is disabled!", e);
  111. } catch (BadCredentialsException e) {
  112. throw new AuthenticationException("Bad credentials!", e);
  113. }
  114. }
  115. /*
  116. * 修改手机号
  117. * */
  118. @PostMapping("/updatePhone")
  119. public void updatePhone(@RequestParam(name = "phone") String phone, @RequestParam(name = "id") Long id) {
  120. //smsService.verify(user.getPhone(), code);
  121. User byPhone = userRepo.findByPhone(phone);
  122. if (byPhone == null) {
  123. userRepo.updateUserPhone(phone, id);
  124. }
  125. }
  126. @GetMapping("/my")
  127. public User my() {
  128. return userRepo.findById(SecurityUtils.getAuthenticatedUser().getId())
  129. .orElseThrow(new BusinessException("用户不存在"));
  130. }
  131. @PreAuthorize("hasRole('ADMIN')")
  132. @GetMapping("/all")
  133. public Page<User> all(PageQuery pageQuery) {
  134. return userRepo.findAll(toSpecification(pageQuery, User.class), toPageRequest(pageQuery));
  135. }
  136. @PreAuthorize("hasRole('ADMIN')")
  137. @GetMapping("/get/{id}")
  138. public User get(@PathVariable Long id) {
  139. return userRepo.findById(id).orElseThrow(new BusinessException("无记录"));
  140. }
  141. @GetMapping("/excel")
  142. @ResponseBody
  143. public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
  144. List<User> data = all(pageQuery).getContent();
  145. ExcelUtils.export(response, data);
  146. }
  147. @PostMapping("/getMaUserInfo")
  148. @ApiOperation(value = "获取小程序用户信息")
  149. public User getMaUserInfo(String sessionKey, String rawData, String signature, String encryptedData, String iv) {
  150. User user = userService.getMaUserInfo(sessionKey, rawData, signature, encryptedData, iv);
  151. if (user != null) {
  152. return user;
  153. }
  154. throw new BusinessException("获取用户信息失败");
  155. }
  156. @PreAuthorize("hasRole('ADMIN')")
  157. @PostMapping("/setPasswordAdmin")
  158. public String setPasswordAdmin(@RequestParam Long userId, @RequestParam String password) {
  159. return userService.setPassword(userId, password);
  160. }
  161. @PreAuthorize("hasRole('ADMIN')")
  162. @GetMapping("/getToken/{userId}")
  163. public String getToken(@PathVariable Long userId) {
  164. return jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(userId)
  165. .orElseThrow(new BusinessException("用户不存在"))));
  166. }
  167. @PostMapping("/updateProfile")
  168. public void updateProfile(@RequestParam String orgName, @RequestParam String occupation,
  169. @RequestParam String contactName, @RequestParam String contactPhone,
  170. @RequestParam String email, @RequestParam String idNo) {
  171. userService.updateProfile(SecurityUtils.getAuthenticatedUser().getId(), orgName, occupation, contactName,
  172. contactPhone, email, idNo);
  173. }
  174. }