前の春クラウドゲートウェイとの統合は、我々は春クラウドゲートウェイを統合する方法を説明します
この記事ソースアドレス:
それでは、我々はゲートウェイの入り口には、関連する認証機関として統合することができますしたい、特定の統合プロセスを参照してください。
この統合モジュールの権限は、電流を得るための一般的なプロジェクトは、ログインしたユーザ・インターフェースを呼び出すために、より頻繁インタフェース情報の一つです。ここでまた、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;
});
}