|
@@ -0,0 +1,63 @@
|
|
|
+package com.hosea.gateway.login;
|
|
|
+
|
|
|
+import cn.hutool.core.lang.TypeReference;
|
|
|
+import cn.hutool.http.HttpResponse;
|
|
|
+import cn.hutool.http.HttpUtil;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import com.alibaba.cola.dto.SingleResponse;
|
|
|
+import com.alibaba.cola.exception.BizException;
|
|
|
+import com.hosea.cloud.gateway.constant.LoginErrorCode;
|
|
|
+import com.hosea.cloud.gateway.maxkey.MaxKeyLoginHandle;
|
|
|
+import com.hosea.cloud.web.constant.CommonConstant;
|
|
|
+import com.hosea.cloud.web.login.JwtToken;
|
|
|
+import com.hosea.cloud.web.login.JwtTokenTenant;
|
|
|
+import com.hosea.service.user.client.dto.response.UserInfoResponse;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.lang.reflect.Type;
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * MaxKey的登录处理
|
|
|
+ *
|
|
|
+ * @author hosea
|
|
|
+ * @date 2025-07-07
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component("maxkey")
|
|
|
+public class MaxKeyLoginHandleImpl extends MaxKeyLoginHandle {
|
|
|
+ @Override
|
|
|
+ public JwtToken queryUserServiceGetUserInfo(String user) {
|
|
|
+ // 请求用户服务的接口,得到用户信息,由于下游服务都不用验签,所以jwt密码随便,非空就行
|
|
|
+ try (HttpResponse response = HttpUtil.createGet(getExtension().getUserServiceUrl()).header(CommonConstant.REQUEST_HEADER_AUTH, JwtToken.builder().user(user).build().jwt("xxx")).execute()) {
|
|
|
+ SingleResponse<UserInfoResponse> userInfo = JSONUtil.toBean(response.body(), new TypeReference<SingleResponse<UserInfoResponse>>() {
|
|
|
+ @Override
|
|
|
+ public Type getType() {
|
|
|
+ return super.getType();
|
|
|
+ }
|
|
|
+ }, true);
|
|
|
+ if (!userInfo.isSuccess()) {
|
|
|
+ throw new BizException(userInfo.getErrCode(), userInfo.getErrMessage());
|
|
|
+ }
|
|
|
+ return JwtToken.builder()
|
|
|
+ .user(user)
|
|
|
+ .name(userInfo.getData().getUser().getNickName())
|
|
|
+ .tenants(Optional.ofNullable(userInfo.getData().getTenants())
|
|
|
+ .stream()
|
|
|
+ .flatMap(Collection::stream)
|
|
|
+ .map(row -> JwtTokenTenant.builder()
|
|
|
+ .id(row.getId())
|
|
|
+ .code(row.getCode())
|
|
|
+ .name(row.getName())
|
|
|
+ .build())
|
|
|
+ .collect(Collectors.toList()))
|
|
|
+ .build();
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("Query Error User:{}", user, e);
|
|
|
+ throw LoginErrorCode.USER_INFO.toBizException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|