Précédente intégration passerelle nuage printemps Nous expliquons comment intégrer passerelle nuage Spring
Cet article Source Adresse:
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;
});
}