首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用spring上下文在Zuul过滤器之间传递新对象?

如何使用spring上下文在Zuul过滤器之间传递新对象?
EN

Stack Overflow用户
提问于 2018-08-07 14:26:44
回答 1查看 564关注 0票数 1

目前,我有AuthFilter,在这里我收到了一个UserState。我需要把它传递给下一个过滤器。但是怎么做才对呢?或者存在其他实践来解决它?

代码语言:javascript
运行
复制
public class AuthFilter extends ZuulFilter {

    @Autowired
    private AuthService authService;

    @Autowired
    private ApplicationContext appContext;

    @Override
    public String filterType() {
        return PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return PRE_DECORATION_FILTER_ORDER - 2;
    }

    @Override
    public boolean shouldFilter() {
        RequestContext context = RequestContext.getCurrentContext();
        String requestURI = context.getRequest().getRequestURI();
        for (String authPath : authPaths) {
            if (requestURI.contains(authPath)) return true;
        }
        return false;
    }

    @Override
    public Object run() throws ZuulException {

        try {
            UserState userState = authService.getUserData();

            DefaultListableBeanFactory context = new DefaultListableBeanFactory();

            GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
            beanDefinition.setBeanClass(UserState.class);
            beanDefinition.setPropertyValues(new MutablePropertyValues() {
                {
                    add("user", userState);
                }
            });
            context.registerBeanDefinition("userState", beanDefinition);
        } catch (UndeclaredThrowableException e) {
            if (e.getUndeclaredThrowable().getClass() == UnauthorizedException.class) {
                throw new UnauthorizedException(e.getMessage());
            }

            if (e.getUndeclaredThrowable().getClass() == ForbiddenException.class) {
                throw new ForbiddenException(e.getMessage(), "The user is not allowed to make this request");
            }
        }

        return null;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-08-07 16:08:41

我非常确定过滤器被链接在一起,请求/响应通过它们传递。您可以将数据添加到请求中,并让下一个筛选器查找它。

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

https://stackoverflow.com/questions/51720147

复制
相关文章

相似问题

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