2011-08-25 94 views
1

我一直在学习Google AppEngine几个星期......现在我正在将它与Gwt集成到我的Web应用程序中。AppEngine:创建我自己的UserService?

“留言”GAE教程非常有趣,如果你知道我在说什么。

我喜欢与谷歌帐户的那么容易整合,这是非常有用的,但...

我的客户不感兴趣,他要标准,经典的认证系统。

因此,我将在数据存储中拥有自己的“用户”实体,依此类推。我可以做到这一点。

我不能做的是创建我自己的UserService,用于检查无论我的应用程序中的哪个用户登录或没有登录。

我的意思是我不擅长管理会话,饼干或任何需要达到我的目标。你能帮助我吗?

+0

你看过联邦身份验证选项吗?如果他们不需要Google登录,那么OpenID有什么问题? –

+0

@尼克老实说,我认为这是一个有效的请求。虽然有很多人喜欢单点登录,但我至少遇到了相同数量的用户(特别是Google生态系统以外的用户),他们觉得这很令人困惑和/或烦人。缺乏单一注销解决方案尤其麻烦。 –

+0

@Kevin我并不反对 - 但OP没有提及考虑过OpenID,所以我认为这值得一提。有人可能希望避免常规用户API,但仍然对OAuth感到满意。 –

回答

7

如果您唯一的问题是要知道用户是否已登录,那么解决方案很简单。

认证代码,一旦用户通过验证:

request.getSession().setAttribute("loggedIn", Boolean.TRUE); 

港九代码:

boolean loggedIn = request.getSession().getAttribute("loggedIn") != null; 

如果你有一个 “退出” 动作:

request.getSession().removeAttribute("loggedIn"); 

会话中的属性存储在服务器端。它们不会作为cookie发送给客户,因此不存在安全风险。

+0

在我的用例中,在任何Gwt RemoteServiceServlet扩展中,我将检查请求/会话,并且我做到了! :)无论如何,你提到“你唯一的问题”就像是有更多东西需要知道有一个好的认证系统一样。你什么意思? –

+1

我的意思是说,通常困难的部分不是如何检查用户是否已通过身份验证,而是如何安全地进行身份验证(腌制和散列密码等),如何确保整个网址只能通过身份验证用户无需强制显式检查所有受保护的资源(使用过滤器是一个很好的解决方案),以及如何将用户重定向到登录页面,对其进行身份验证,然后将其重定向到他想要访问的页面。 –