Cloud Services de printemps pour construire des micro-série (neuf): passerelle, Nuage, Printemps intégré Printemps Cloud Security, oauth2 obtenir le courant utilisateur connecté

Précédente intégration passerelle nuage printemps Nous expliquons comment intégrer passerelle nuage Spring

Cet article Source Adresse:

Adresse Source

Donc, nous voulons que l'entrée de la passerelle peut être intégrée comme une autorité de certification pertinente, s'il vous plaît se référer au processus d'intégration spécifique:

Printemps Nuage Passerelle pour obtenir le contrôle d'accès

Cette autorisations de module d'intégration, le projet général pour obtenir l'interface utilisateur connecté en cours est l'une des informations d'interface plus fréquente appeler. Ici, reflète aussi l'un des avantages de l'utilisation façon JWT, la partie des informations utilisateur a été mis en cache dans le jeton.

D'après les informations ci-dessus, nous pouvons commencer à partir du contexte de la sécurité:

    /**
     * 获取用户token信息
     * @return
     */
    default Mono<JSONObject> getTokenInfo(){
        Mono<JSONObject> baseUser = ReactiveSecurityContextHolder.getContext()
                .switchIfEmpty(Mono.error(new IllegalStateException("ReactiveSecurityContext is empty")))
                .map(SecurityContext::getAuthentication)
                .map(Authentication::getPrincipal)
                .map(jwt->{
                    Jwt jwtValue = null;
                    if(jwt instanceof Jwt){
                        jwtValue = (Jwt)jwt;
                    }
                    JSONObject tokenInfo = JSONObject.parseObject(JSONObject.toJSONString(jwtValue.getClaims()));
                    return tokenInfo;
                });
        return baseUser;
    }

Tel est le jeton pour obtenir des informations après décodage de l'ensemble JWT. Ensuite, nous pouvons obtenir les informations que nous voulons que l'utilisateur par le jeton.

    /**
     * 获取用户信息
     * @return
     */
    default Mono<BaseUser> getUserInfo(){
        return getTokenInfo().map(token->token.getJSONObject(Constant.USER_INFO).toJavaObject(BaseUser.class));
    }

Bien sûr, le plus souvent pour le contrôle d'accès, nous avons besoin d'obtenir la bonne information au ACQUIRE même temps l'interface utilisateur de toute l'utilisateur de sorte que la mise en forme finale comme suit:

    @Override
    public Mono<UserResponse> getUserInfoByAccess() {
        Mono<JSONObject> tokenInfo = getTokenInfo();
        return tokenInfo.map(token->{
            UserResponse userResponse  = new UserResponse();
            BaseUser baseUser = token.getJSONObject(Constant.USER_INFO).toJavaObject(BaseUser.class);
            userResponse.setBaseUser(baseUser);
            JSONArray array = token.getJSONArray("authorities");
            //查询全部的权限
            List<Permission> result = permissionUtil.getResultPermission(array);
            if(!CollectionUtils.isEmpty(result)) {
                userResponse.setAccess(result.stream().map(Permission::getAuthCode).collect(Collectors.toList()));
            }
            return userResponse;
        });
    }

 

Il a publié 183 articles originaux · louange gagné 37 · vues 160 000 +

Je suppose que tu aimes

Origine blog.csdn.net/zhuwei_clark/article/details/104775878
conseillé
Classement