JnpfOfficialTokenGranter.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package jnpf.granter;
  2. import jnpf.base.ActionResult;
  3. import jnpf.base.UserInfo;
  4. import jnpf.consts.AuthConsts;
  5. import jnpf.database.util.TenantDataSourceUtil;
  6. import jnpf.exception.LoginException;
  7. import jnpf.model.BaseSystemInfo;
  8. import jnpf.model.LoginForm;
  9. import jnpf.model.LoginVO;
  10. import jnpf.permission.entity.UserEntity;
  11. import jnpf.util.JsonUtil;
  12. import jnpf.util.LoginHolder;
  13. import jnpf.util.UserProvider;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. import java.util.Map;
  18. import static jnpf.granter.JnpfOfficialTokenGranter.GRANT_TYPE;
  19. /**
  20. * JNPF官网专用短信认证
  21. *
  22. * @author JNPF开发平台组
  23. * @user N
  24. * @copyright 引迈信息技术有限公司
  25. * @date 2022/9/17 22:13
  26. */
  27. @Slf4j
  28. @Component(GRANT_TYPE)
  29. public class JnpfOfficialTokenGranter extends PasswordTokenGranter {
  30. public static final String GRANT_TYPE = "official";
  31. @Autowired
  32. private UserDetailsServiceBuilder userDetailsServiceBuilder;
  33. @Override
  34. public ActionResult granter(Map<String, String> loginParameters) throws LoginException {
  35. LoginForm loginForm = JsonUtil.getJsonToBean(loginParameters, LoginForm.class);
  36. //校验短信验证码
  37. TenantDataSourceUtil.checkOfficialSmsCode(loginForm.getAccount(), loginForm.getCode(), 1);
  38. UserInfo userInfo = UserProvider.getUser();
  39. //切换租户
  40. switchTenant(userInfo);
  41. //获取系统配置
  42. BaseSystemInfo baseSystemInfo = getSysconfig(userInfo);
  43. //预检信息
  44. preAuthenticate(loginForm, userInfo, baseSystemInfo);
  45. //登录账号
  46. super.loginAccount(userInfo, baseSystemInfo);
  47. //返回登录信息
  48. LoginVO loginResult = getLoginVo(userInfo);
  49. return ActionResult.success(loginResult);
  50. }
  51. /**
  52. * 可重写实现邮箱、短信、TOTP验证
  53. *
  54. * @param loginForm
  55. * @param sysConfigInfo
  56. * @throws LoginException
  57. */
  58. protected void preAuthenticate(LoginForm loginForm, UserInfo userInfo, BaseSystemInfo sysConfigInfo) throws LoginException {
  59. //验证密码
  60. UserEntity userEntity = userDetailsServiceBuilder.getUserDetailService(AuthConsts.USERDETAIL_ACCOUNT).loadUserEntity(userInfo);
  61. try {
  62. authenticateLock(userEntity, sysConfigInfo);
  63. } catch (Exception e) {
  64. authenticateFailure(userEntity, sysConfigInfo);
  65. throw e;
  66. }
  67. LoginHolder.setUserEntity(userEntity);
  68. }
  69. @Override
  70. protected String getGrantType() {
  71. return GRANT_TYPE;
  72. }
  73. }