AppEngine中的getCurrentUser Magic - 它是如何工作的?

时间:2012-10-11 04:34:09

标签: google-app-engine

Google如何在不通过HttpServletRequest请求参数的情况下调用userService.getCurrentUser()?我希望扩展UserService,但它不允许我轻松地这样做。

我创建了自己的身份验证机制,与UserService重叠,以便我可以允许Google支持的用户和将自动登录的用户。但我很想知道如何在从任何函数调用时发送getCurrentUser。

这是当前的工作流程

请求保护资源 - >过滤器 - >将当前用户设置在某个地方,但我不确定在哪里,以便我可以从应用程序的其余部分调用它而不传递httprequests ..

在我的代码中

GetCurrentUser()应返回过滤器中设置的用户。请注意,我不会传递原始的HttpServletRequest

感谢。

1 个答案:

答案 0 :(得分:0)

经过几天的研究,我们可以安全地在ThreadLocal中保存会话信息。这是在servlet过滤器中设置的。 Static ThreadLocal variable in a WebApp - Are there any Security/Performance issues?

由于每个servlet都在一个线程中执行,我们可以安全地从代码中调用getCurrentUser,然后从threadlocal中读取。

但是,请注意。线程被回收。因此,您可以获得一个为不同用户设置threadlocal的线程。你必须确保每次都重置它。