只是想知道我的以下身份验证方法是否正确。是否有任何陷阱或遗漏?建议和讨论非常受欢迎。
1>用户提供用户名和密码,并通过RPC发送到服务器。与存储在DB中的散列值进行比较。
2 - ;假设用户名和密码准确,则在会话中保存验证令牌。访问servlet时将检查身份验证令牌。
3> RPC onSuccess将用户标识(整数)返回给客户端。用户标识保存在客户端的静态变量中。
4>每当需要用户特定信息时,带有用户ID(静态变量)的rpc调用将被发送到服务器以进行数据库查询。
由于
答案 0 :(得分:2)
您最好将令牌返回给客户端,并验证令牌而不是用户ID。 如果使用用户ID,则用户A登录,然后另一个用户可以向服务器发送假装为用户A的请求。您的身份验证方法无法保护数据。
答案 1 :(得分:2)
您无需向客户端发送用户ID。服务器已经拥有了识别用户所需的所有信息。
此代码段创建了一个会话cookie,session.getId()
您可以获取其内容,您应该保存该内容以识别用户:
HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession(true);
然后,当用户呼叫您的服务器时,您只需回读会话ID。
HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession(false);
使用session.invalidate()
您可以销毁会话,也可以在会话中store objects。
this.getThreadLocalRequest()
仅适用于* Impl。
答案 2 :(得分:0)
你引用了
3> RPC onSuccess将用户标识(整数)返回给客户端。用户标识保存在客户端的静态变量中。
如果用户刷新其页面,则会重置存储在客户端静态字段中的值,对吗?在那种情况下,会话结束了吗?系统会提示用户再次登录?