作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Google Cloud Endpoint 中,我可以注入(inject)自定义 Authenticator
和一个 User
如下所示。我想公开 User
的实例以类似于 Apache Shiro 的 SecurityUtils.getSubject()
的方式提供服务方法.
我尝试通过执行 UserServiceFactory.getUserService().getCurrentUser()
来做到这一点,但无济于事(返回 null
)。
我已经实现了一些在服务上执行身份验证逻辑的注释,我希望将其与服务内的实际业务逻辑分开。因此,如果我可以从任何地方检索属于当前正在处理的请求的当前用户,那将会很有帮助。我在没有 Spring Security 或 Apache 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/
我是一名优秀的程序员,十分优秀!