AuthUtil.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package jnpf.util;
  2. import com.google.common.collect.ImmutableMap;
  3. import jnpf.base.ActionResult;
  4. import jnpf.base.UserInfo;
  5. import jnpf.exception.LoginException;
  6. import jnpf.model.LoginVO;
  7. import jnpf.service.AuthService;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. import java.util.Map;
  12. import java.util.Optional;
  13. /**
  14. * 内部登录、退出用户工具
  15. */
  16. @Slf4j
  17. @Component
  18. public class AuthUtil {
  19. public static AuthService authApi;
  20. @Autowired
  21. public void setAuthApi(AuthService authApi) {
  22. AuthUtil.authApi = authApi;
  23. }
  24. /**
  25. * 登录临时用户
  26. * 此用户已经登录将返回现有用户Token
  27. * 未登录将直接使用用户ID进行免密登录返回Token
  28. *
  29. * @param userId 用户ID
  30. * @param tenantId 租户ID
  31. * @return
  32. */
  33. public static String loginTempUser(String userId, String tenantId){
  34. return loginTempUser(userId, tenantId, false);
  35. }
  36. /**
  37. * 登录临时用户
  38. * 此用户已经登录将返回现有用户Token
  39. * 未登录将直接使用用户ID进行免密登录返回Token
  40. *
  41. * @param userId 用户ID
  42. * @param tenantId 租户ID
  43. * @param limited 是否是限制型临时用户(无法登录主系统前端)
  44. * @return
  45. */
  46. public static String loginTempUser(String userId, String tenantId, boolean limited){
  47. Map<String, String> loginInfo = ImmutableMap.of(
  48. "grant_type", "tempuser",
  49. "token", UserProvider.getInnerAuthToken(),
  50. "userId", userId,
  51. "tenantId", Optional.ofNullable(tenantId).orElse(StringUtil.NULLSTR),
  52. "limited", String.valueOf(limited));
  53. String errMsg;
  54. ActionResult<LoginVO> result = authApi.login(loginInfo);
  55. if(Constants.SUCCESS.equals(result.getCode())){
  56. return result.getData().getToken();
  57. }
  58. log.error("登录临时用户失败: {}", result.getMsg());
  59. throw new LoginException(result.getMsg());
  60. }
  61. /**
  62. * 踢出用户, 用户将收到Websocket下线通知
  63. * 执行流程:认证服务退出用户->用户踢出监听->消息服务发送Websocket推送退出消息
  64. * @param tokens
  65. */
  66. public static void kickoutByToken(String... tokens){
  67. authApi.kickoutByToken(tokens);
  68. }
  69. /**
  70. * 踢出用户, 用户将收到Websocket下线通知
  71. * 执行流程:认证服务退出用户->用户踢出监听->消息服务发送Websocket推送退出消息
  72. * @param userId
  73. */
  74. public static void kickoutByUserId(String userId){
  75. String tenantId = TenantHolder.getDatasourceId();
  76. if(tenantId == null) {
  77. UserInfo userInfo = UserProvider.getUser();
  78. if (userInfo.getUserId() == null) {
  79. throw new RuntimeException("请设置UserInfo");
  80. }
  81. tenantId = userInfo.getTenantId();
  82. }
  83. authApi.kickoutByUserId(userId, tenantId);
  84. }
  85. }