AuthenticationController.java 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.izouma.immall.web;
  2. import com.izouma.immall.domain.User;
  3. import com.izouma.immall.exception.AuthenticationException;
  4. import com.izouma.immall.security.JwtTokenUtil;
  5. import com.izouma.immall.security.JwtUserDetailsService;
  6. import com.izouma.immall.security.JwtUserFactory;
  7. import com.izouma.immall.service.UserService;
  8. import io.swagger.annotations.ApiOperation;
  9. import lombok.AllArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.security.authentication.AuthenticationManager;
  12. import org.springframework.security.authentication.BadCredentialsException;
  13. import org.springframework.security.authentication.DisabledException;
  14. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  15. import org.springframework.security.core.userdetails.UserDetails;
  16. import org.springframework.web.bind.annotation.PostMapping;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RestController;
  19. import java.util.Objects;
  20. @Slf4j
  21. @AllArgsConstructor
  22. @RestController
  23. @RequestMapping("/auth")
  24. public class AuthenticationController {
  25. private AuthenticationManager authenticationManager;
  26. private JwtTokenUtil jwtTokenUtil;
  27. private JwtUserDetailsService userDetailsService;
  28. private UserService userService;
  29. @PostMapping("/login")
  30. public String loginByUserPwd(String username, String password, Integer expiration) {
  31. try {
  32. authenticate(username, password);
  33. final UserDetails userDetails = userDetailsService.loadUserByUsername(username);
  34. return jwtTokenUtil.generateToken(userDetails);
  35. } catch (Exception e) {
  36. log.error("loginByUserPwd", e);
  37. throw new AuthenticationException("用户名或密码错误", e);
  38. }
  39. }
  40. @PostMapping("/phoneLogin")
  41. @ApiOperation(value = "手机号登录")
  42. public String phoneLogin(String phone) {
  43. try {
  44. User user = userService.loginByPhone(phone);
  45. return jwtTokenUtil.generateToken(JwtUserFactory.create(user));
  46. } catch (Exception e) {
  47. log.error("loginByPhone", e);
  48. throw new AuthenticationException("登陆错误", e);
  49. }
  50. }
  51. @PostMapping("/mpLogin")
  52. @ApiOperation(value = "公众号登录")
  53. public String mpLogin(String code) {
  54. try {
  55. User user = userService.loginMp(code);
  56. return jwtTokenUtil.generateToken(JwtUserFactory.create(user));
  57. } catch (Exception e) {
  58. log.error("loginByCode", e);
  59. throw new AuthenticationException("登陆错误", e);
  60. }
  61. }
  62. @PostMapping("/maLogin")
  63. @ApiOperation(value = "小程序登录")
  64. public String maLogin(String code) {
  65. try {
  66. User user = userService.loginMa(code);
  67. return jwtTokenUtil.generateToken(JwtUserFactory.create(user));
  68. } catch (Exception e) {
  69. log.error("loginByCode", e);
  70. throw new AuthenticationException("登陆错误", e);
  71. }
  72. }
  73. /**
  74. * Authenticates the user. If something is wrong, an {@link AuthenticationException} will be thrown
  75. */
  76. private void authenticate(String username, String password) {
  77. Objects.requireNonNull(username);
  78. Objects.requireNonNull(password);
  79. try {
  80. authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
  81. } catch (DisabledException e) {
  82. throw new AuthenticationException("User is disabled!", e);
  83. } catch (BadCredentialsException e) {
  84. throw new AuthenticationException("Bad credentials!", e);
  85. }
  86. }
  87. }