Thanks to visit codestin.com
Credit goes to github.com

Skip to content

SaServletFilter之后的filter不能使用上下文 #876

@llm163520

Description

@llm163520

对以下问题有疑问:

比如我在SaServletFilter之后定义了一个拦截器,我需要获取token的一些内容无法正常获取
< 备注:请尽量详细描述问题所在 >
关联问题,#867
期望调整为(最后的filter处理完成之后再释放),调整后的伪代码如下:

Consumer<SignalType> onFinallyConsumer = (signalType) -> {
            SaReactorSyncHolder.clearContext();
        };
        return new SaReactorFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
                // ---------- 全局认证处理
                try {
                    SaReactorSyncHolder.setContext(exchange);
                    beforeAuth.run(null);
                    SaRouter.match(includeList).notMatch(excludeList).check(r -> auth.run(null));
                    // 继续执行后续 filter,并在整个流结束后清理上下文
                    return chain.filter(exchange).doFinally(onFinallyConsumer);
                } catch (StopMatchException ignored) {
                    return chain.filter(exchange).doFinally(onFinallyConsumer);
                } catch (BackResultException e) {
                    return SaReactorOperateUtil.writeResult(exchange, e.getMessage()).doFinally(onFinallyConsumer);
                } catch (Throwable e) {
                    return SaReactorOperateUtil.writeResult(exchange, String.valueOf(error.run(e))).doFinally(onFinallyConsumer);
                } finally {
                    //SaReactorSyncHolder.clearContext();
                }
            }
        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions