春のクラウドサービスは、マイクロシリーズ(9)を構築するために:春クラウドゲートウェイは、春のクラウドのセキュリティはのOAuth2が、現在はログオンしているユーザーを取得、統合しました

前の春クラウドゲートウェイとの統合は、我々は春クラウドゲートウェイを統合する方法を説明します

この記事ソースアドレス:

送信元アドレス

それでは、我々はゲートウェイの入り口には、関連する認証機関として統合することができますしたい、特定の統合プロセスを参照してください。

春クラウドゲートウェイは、アクセス制御を実現するために

この統合モジュールの権限は、電流を得るための一般的なプロジェクトは、ログインしたユーザ・インターフェースを呼び出すために、より頻繁インタフェース情報の一つです。ここでまた、JWTの方法を使用することの利点の一つを反映し、ユーザー情報の一部は、トークンにキャッシュされています。

上記の情報に基づいて、我々はセキュリティのコンテキストから起動することができます。

    /**
     * 获取用户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;
    }

そのような全体JWTを復号化後の情報を取得するトークンです。その後、我々は我々がトークンを介してユーザーが欲しい情報を得ることができます。

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

もちろん、通常のアクセス制御のために、我々は、最終的な成形は以下のようにして同じ時間取得で全体のユーザーのユーザー・インタフェースを適切な情報を入手する必要があります。

    @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;
        });
    }

 

彼は183元記事に公開 ウォン称賛37 ビュー160 000 +を

おすすめ

転載: blog.csdn.net/zhuwei_clark/article/details/104775878