首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步弹簧安全WebFilter

异步弹簧安全WebFilter
EN

Stack Overflow用户
提问于 2017-07-22 19:15:01
回答 1查看 660关注 0票数 0

如何使用WebFilter处理SecurityContextHolder中的块。我试着在Mono的doOnSuccess(.)和thenEmpty(.),但是它从未被调用过。

代码语言:javascript
复制
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    HttpHeaders headers = exchange.getRequest().getHeaders();
    long internalId = Long.parseLong(headers.get(INTERNAL_ID_HEADER).get(0));
    String email = headers.get(EMAIL_HEADER).get(0);

    Mono<User> userMono = Mono.just(internalId)
            .flatMap(userRepository::findById)
            .switchIfEmpty(userRepository.save(new User().setId(internalId)
                            .setFirstName(getFirstName(email))
                            .setLastName(getLastName(email))
                            .setEmail(email)
                    )
            );

    SecurityContextHolder.getContext().setAuthentication(userMono.block());

    return chain.filter(exchange);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-24 12:07:09

您似乎正在尝试使用Security中的阻塞基础设施。如果我没记错的话,SecurityContextHolder就是ThreadLocal-based;这种方法不能在一个给定的请求不能在单个线程上处理的反应性环境中工作。

您可能想看看Spring安全中即将出现的WebFlux支持

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45258260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档