TempUserTokenGranter.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package jnpf.granter;
  2. import jnpf.base.ActionResult;
  3. import jnpf.base.UserInfo;
  4. import jnpf.constant.MsgCode;
  5. import jnpf.consts.AuthConsts;
  6. import jnpf.consts.DeviceType;
  7. import jnpf.exception.LoginException;
  8. import jnpf.model.BaseSystemInfo;
  9. import jnpf.model.LoginVO;
  10. import jnpf.util.UserProvider;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.springframework.stereotype.Component;
  13. import java.util.Arrays;
  14. import java.util.Map;
  15. import static jnpf.granter.TempUserTokenGranter.GRANT_TYPE;
  16. /**
  17. * 临时用户认证
  18. * @user N
  19. * @author JNPF开发平台组
  20. * @copyright 引迈信息技术有限公司
  21. * @date 2022/9/16 21:25
  22. */
  23. @Slf4j
  24. @Component(GRANT_TYPE)
  25. public class TempUserTokenGranter extends AbstractTokenGranter{
  26. public static final String GRANT_TYPE = "tempuser";
  27. public static final Integer ORDER = 4;
  28. private static final String URL_LOGIN = "";
  29. public TempUserTokenGranter(){
  30. super(URL_LOGIN);
  31. }
  32. /**
  33. *
  34. * @param loginParameters {userId, tenantId}
  35. * @return
  36. * @throws LoginException
  37. */
  38. @Override
  39. public ActionResult granter(Map<String, String> loginParameters) throws LoginException {
  40. String token = loginParameters.get("token");
  41. //验证是否由内部发起
  42. if(!UserProvider.isValidInnerToken(token)){
  43. throw new LoginException(MsgCode.OA018.get());
  44. }
  45. String userId = loginParameters.get("userId");
  46. String tenantId = loginParameters.get("tenantId");
  47. boolean limited = Boolean.valueOf(loginParameters.get("limited"));
  48. String device = limited?DeviceType.TEMPUSERLIMITED.getDevice():DeviceType.TEMPUSER.getDevice();
  49. //尝试获取已经登录的用户信息
  50. UserInfo userInfo;
  51. if(limited){
  52. //只获取限制类型的TOKEN
  53. userInfo = UserProvider.getUser(userId, tenantId, Arrays.asList(DeviceType.TEMPUSERLIMITED.getDevice()), null);
  54. }else{
  55. //排除限制类型的TOKEN
  56. userInfo = UserProvider.getUser(userId, tenantId, null, Arrays.asList(DeviceType.TEMPUSERLIMITED.getDevice()));
  57. }
  58. if(userInfo.getUserId() != null){
  59. return ActionResult.success(getLoginVo(userInfo));
  60. }
  61. userInfo = UserProvider.getUser();
  62. userInfo.setUserAccount(tenantId);
  63. userInfo.setUserId(userId);
  64. //切换租户
  65. switchTenant(userInfo);
  66. //获取系统配置
  67. BaseSystemInfo baseSystemInfo = getSysconfig(userInfo);
  68. //先设置用户类型
  69. userInfo.setLoginDevice(device);
  70. //登录账号
  71. super.loginAccount(userInfo, baseSystemInfo);
  72. //返回登录信息
  73. LoginVO loginResult = getLoginVo(userInfo);
  74. return ActionResult.success(loginResult);
  75. }
  76. @Override
  77. public int getOrder() {
  78. return ORDER;
  79. }
  80. @Override
  81. protected void preLogin(UserInfo userInfo, BaseSystemInfo baseSystemInfo) throws LoginException {
  82. }
  83. @Override
  84. protected void login(UserInfo userInfo, BaseSystemInfo baseSystemInfo) throws LoginException {
  85. UserProvider.loginNoRequest(userInfo, this.getLoginModel(userInfo, baseSystemInfo));
  86. }
  87. @Override
  88. protected void loginSuccess(UserInfo userInfo, BaseSystemInfo baseSystemInfo) {
  89. super.loginSuccess(userInfo, baseSystemInfo);
  90. }
  91. @Override
  92. protected DeviceType getDeviceType() {
  93. return DeviceType.TEMPUSER;
  94. }
  95. protected LoginVO getLoginVo(UserInfo userInfo){
  96. LoginVO loginVO = new LoginVO();
  97. loginVO.setTheme(userInfo.getTheme());
  98. loginVO.setToken(userInfo.getToken());
  99. return loginVO;
  100. }
  101. @Override
  102. public ActionResult logout() {
  103. //非临时用户不注销
  104. UserInfo userInfo = UserProvider.getUser();
  105. if(UserProvider.isTempUser(userInfo)){
  106. UserProvider.logoutByToken(userInfo.getToken());
  107. }
  108. return ActionResult.success(MsgCode.OA014.get());
  109. }
  110. @Override
  111. protected String getGrantType() {
  112. return GRANT_TYPE;
  113. }
  114. @Override
  115. protected String getUserDetailKey() {
  116. return AuthConsts.USERDETAIL_USER_ID;
  117. }
  118. }