gpt4 book ai didi

spring-security - 同一场比赛中的 webflux 安全多重角色

转载 作者:行者123 更新时间:2023-12-04 07:00:07 29 4
gpt4 key购买 nike

我在spring cloud gateway中使用了spring security。 cloud版本为Finchely.SR2,spring boot版本为2.0.x

然后我像这样在一个匹配器中设置两个角色:

            .pathMatchers("/apis/**").hasRole("TEST1")
.pathMatchers("/apis/**").hasRole("TEST2")

但是,当我启动应用程序并进行测试时,只有 TEST1 角色可以访问。 TEST2 角色获得 FORBIDDEN 403 响应。

我知道在带有 spring-security 的 spring-boot-starter-web 中,它有任何类似的方法

             .antMatchers("/apis/**").hasAnyRole("TEST1", "TEST2")

webflux spring security 有没有像 hasAnyRole(String...roles) 这样的 API 可以使用?

最佳答案

Spring Security 的基本 API 中没有一个可用,但是我一直在使用以下 anyAuthority ,

public class HasAnyAuthority<T> implements ReactiveAuthorizationManager<T> {

private final Collection<String> allowedAuthorities;

public HasAnyAuthority(Collection<String> allowedAuthorities) {
this.allowedAuthorities = allowedAuthorities;
}

@Override
public Mono<AuthorizationDecision> check(final Mono<Authentication> authentication,
T object) {
return authentication.filter(Authentication::isAuthenticated)
.flatMapIterable(Authentication::getAuthorities)
.map(GrantedAuthority::getAuthority).any(allowedAuthorities::contains)
.map(AuthorizationDecision::new)
.defaultIfEmpty(new AuthorizationDecision(false));
}

用法如,

.access(new HasAnyAuthority<>(allowedAuth.getAuthorities())

关于spring-security - 同一场比赛中的 webflux 安全多重角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53775720/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com