gpt4 book ai didi

java - 如何在 Cloud Endpoints 中公开用户而不传递引用?

转载 作者:行者123 更新时间:2023-12-02 12:28:57 25 4
gpt4 key购买 nike

Google Cloud Endpoint 中,我可以注入(inject)自定义 Authenticator和一个 User如下所示。我想公开 User 的实例以类似于 Apache Shiro 的 SecurityUtils.getSubject() 的方式提供服务方法.

我尝试通过执行 UserServiceFactory.getUserService().getCurrentUser() 来做到这一点,但无济于事(返回 null )。

我已经实现了一些在服务上执行身份验证逻辑的注释,我希望将其与服务内的实际业务逻辑分开。因此,如果我可以从任何地方检索属于当前正在处理的请求的当前用户,那将会很有帮助。我在没有 Spring SecurityApache Shiro 的情况下实现此功能。

有没有一种干净的方法可以做到这一点?

@ApiMethod(authenticators = {JwtAuthenticator.class}, name = "find", path="foobars", httpMethod = GET)
public Foobar getFoobar(User user, long id) {
// I'd like to get rid of passing the user reference
return foobars.get(id, user); // performs checks on user
}

最佳答案

不幸的是,由于端点当前的实现方式,使用框架习惯用法无法干净地完成此操作。如果您停止在 API 方法中包含 User 参数,那么身份 validator 将不会首先运行,从而导致实现身份 validator 毫无用处。

如果您独立于端点框架编写自己的身份验证代码,那么您可以拥有使用 ThreadLocal 变量来存储当前用户的静态帮助程序,这些变量通过 servlet 过滤器或其他机制填充。

关于java - 如何在 Cloud Endpoints 中公开用户而不传递引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45377828/

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