基于 Mono 从反应式 mongodb 中检索值
Retrieving values from reactive mongodb based on Mono
我正在构建一个基于 Spring 网关和 webflux 的应用程序,它与 okta 集成作为授权服务器。
前端使用 okta 服务器对用户进行身份验证后,它会获得一个令牌,每个请求都必须使用该令牌 header 作为承载令牌。
我现在正在开发的端点负责根据分配给该用户的组从反应式 mongodb 中检索与该经过身份验证的用户相关的所有菜单。
从 okta JWT 令牌中提取的用户组 is/are,之后我应该查询 select 与这些组相关的所有菜单。
问题是我无法使用提取的组名称来使用它从反应式查询 mongodb
@RequestMapping("/menus")
public Mono oauthUserInfo() {
return ReactiveSecurityContextHolder.getContext().filter(c -> Objects.nonNull(c.getAuthentication()))
.map(s -> s.getAuthentication().getAuthorities().stream().filter((g) ->g.getAuthority().startsWith("GR_")));
}
访问上面的 endpint 正在检索经过身份验证的用户组,如下所示:
[
{
"authority": "GR_user"
},
{
"authority": "GR_admin"
}
]
我的主要问题是,如何使用它从我的反应式 mongodb 中使用 'in' 运算符检索相关菜单并检索 Flux< Menu >
经过多次尝试,我最终通过从 Bearer 令牌中提取组名称实现了我的目标,如下所示
@RequestMapping("/menu")
public Flux<Menu> newEndPoint(){
return ReactiveSecurityContextHolder.getContext().filter(c -> Objects.nonNull(c.getAuthentication())).cast(SecurityContextImpl.class)
.map( a -> a.getAuthentication().getPrincipal()).cast(Jwt.class)
.map( a -> a.getClaims().get("groups").toString().substring(1,a.getClaims().get("groups").toString().length()-1).replaceAll("\"",""))
.map( a -> a.split(","))
.flatMapIterable( a -> Arrays.asList(a))
.flatMap( a -> customMenuRepository.findByGroup(a))
;
}
在第 2 次和第 3 次地图调用中完成的操作是由于获取如下组值 ["GR_user", "GR_admin"],我需要它作为列表没有 [ 或 " 或 ,
的字符串
我正在构建一个基于 Spring 网关和 webflux 的应用程序,它与 okta 集成作为授权服务器。
前端使用 okta 服务器对用户进行身份验证后,它会获得一个令牌,每个请求都必须使用该令牌 header 作为承载令牌。
我现在正在开发的端点负责根据分配给该用户的组从反应式 mongodb 中检索与该经过身份验证的用户相关的所有菜单。
从 okta JWT 令牌中提取的用户组 is/are,之后我应该查询 select 与这些组相关的所有菜单。
问题是我无法使用提取的组名称来使用它从反应式查询 mongodb
@RequestMapping("/menus")
public Mono oauthUserInfo() {
return ReactiveSecurityContextHolder.getContext().filter(c -> Objects.nonNull(c.getAuthentication()))
.map(s -> s.getAuthentication().getAuthorities().stream().filter((g) ->g.getAuthority().startsWith("GR_")));
}
访问上面的 endpint 正在检索经过身份验证的用户组,如下所示:
[
{
"authority": "GR_user"
},
{
"authority": "GR_admin"
}
]
我的主要问题是,如何使用它从我的反应式 mongodb 中使用 'in' 运算符检索相关菜单并检索 Flux< Menu >
经过多次尝试,我最终通过从 Bearer 令牌中提取组名称实现了我的目标,如下所示
@RequestMapping("/menu")
public Flux<Menu> newEndPoint(){
return ReactiveSecurityContextHolder.getContext().filter(c -> Objects.nonNull(c.getAuthentication())).cast(SecurityContextImpl.class)
.map( a -> a.getAuthentication().getPrincipal()).cast(Jwt.class)
.map( a -> a.getClaims().get("groups").toString().substring(1,a.getClaims().get("groups").toString().length()-1).replaceAll("\"",""))
.map( a -> a.split(","))
.flatMapIterable( a -> Arrays.asList(a))
.flatMap( a -> customMenuRepository.findByGroup(a))
;
}
在第 2 次和第 3 次地图调用中完成的操作是由于获取如下组值 ["GR_user", "GR_admin"],我需要它作为列表没有 [ 或 " 或 ,
的字符串