在 Google Cloud Endpoint 中,我可以注入自定义Authenticator
和User
,如下所示。我想以类似于 Apache Shiro 的User
的方式将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
}
答案 0 :(得分:1)
不幸的是,由于Endpoints当前的实现方式,使用Framework惯用法不可能干净利落。如果您停止在API方法中包含User
个参数,那么首先不会运行身份验证器,从而无法实现身份验证器。
如果您独立于Endpoints Framework编写自己的auth代码,那么您可以使用ThreadLocal
变量来存储当前用户的静态助手,这些用户通过servlet过滤器或其他一些机制填充。