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