Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于GWT、Cookies和网页定向的问题_Java_Web Applications_Gwt_Cookies - Fatal编程技术网

Java 关于GWT、Cookies和网页定向的问题

Java 关于GWT、Cookies和网页定向的问题,java,web-applications,gwt,cookies,Java,Web Applications,Gwt,Cookies,我正在使用gwt创建一个网站。此问题涉及用于保存登录详细信息的登录页面和cookies。GWT允许您在单个网页中创建网站 我的应用程序运行在一个网页上。我将应用程序设置为,有一个带有登录按钮的登录框,如果详细信息正确,它将加载底层UI并删除登录框 这意味着每次我刷新页面时,应用程序都会将我带到登录页面。是否设置了保存用户信息的cookie(例如一天),将详细信息输入登录框并自动登录 此外,web应用程序中的注销按钮将删除cookie中的信息,并将您带到登录页面(删除cookie信息并将您引导到网

我正在使用gwt创建一个网站。此问题涉及用于保存登录详细信息的登录页面和cookies。GWT允许您在单个网页中创建网站

我的应用程序运行在一个网页上。我将应用程序设置为,有一个带有登录按钮的登录框,如果详细信息正确,它将加载底层UI并删除登录框

这意味着每次我刷新页面时,应用程序都会将我带到登录页面。是否设置了保存用户信息的cookie(例如一天),将详细信息输入登录框并自动登录

此外,web应用程序中的注销按钮将删除cookie中的信息,并将您带到登录页面(删除cookie信息并将您引导到网页的登录部分)


或者会有不同的方法。

您可以在GWT中找到一些关于登录安全性的信息。还有一节介绍如何使用Cookie来记住用户已登录。

我想说你几乎做到了:d以下是我在应用程序中处理登录/注销的方法:

  • 用户加载页面-如果他有一个带有标记的cookie集(有关更多信息,请参阅下几点),则将该标记发送到服务器以检查其是否仍然有效。如果有效,则表示您已登录,请转至第5点。请参阅下面有关如何处理无效令牌的说明
  • 用户输入用户/通行证组合。此信息被发送到服务器(最好通过加密连接发送,但使用GWT很难实现—例如,请参阅)
  • 服务器检查用户/密码散列(见下文)组合是否与数据库中的内容匹配。如果是这样,它将生成一个标记(只是一些随机的、相当长的字符串,如一个)并将其发送回客户端
  • 如果用户在登录期间选中了“记住我”复选框,则将令牌存储在具有未来到期日期的cookie中(请参阅其他指南/关于建议时间段的问题)
  • 当客户端接收到令牌时,它应该将其用于向服务器发出的每个请求,您只希望经过身份验证的用户执行这些请求。在那里,服务器检查令牌是否有效(您必须跟踪数据库中的令牌/用户对),如果有效,则授权事务/任何内容这里有一个陷阱:如果你只依赖饼干,你将很容易受到攻击。这就是为什么您还应该将令牌作为请求的一部分传递(cookie自动传输-这就是为什么XSRF攻击是可能的)的原因(您知道,就像JSON中的附加字段或通过GWT-RPC发送的POJO中的字段,甚至HTTP头中的字段)
  • 在显式注销时(单击“注销”链接等),向该用户刚刚注销的服务器发送信息。然后,服务器应删除/使令牌无效。无论“记住我”选项如何,它都应该这样做,因为显式注销意味着用户希望删除该PC/浏览器上的登录信息,并阻止其他人以他/她的身份登录。如果用户刚刚关闭浏览器/页面,并且您在第4点正确设置了cookie(也就是说,cookie不会在浏览器关闭时过期-只有在选择了“记住我”选项的情况下才会过期),则下次访问时,用户应在第1点自动登录
  • 一些补充说明

    • 这非常重要:记住在服务器端检查通过cookie传递的令牌是否等于作为请求/负载一部分传递的令牌
    • 不要将密码以纯文本形式存储在数据库中-存储密码的哈希值。使用BCrypt可获得最大的安全性。这就是为什么我写道,您应该比较密码哈希值,而不是实际密码
    • 当服务器遇到无效令牌时,这可能意味着许多事情——从正常到警报。一般来说,最好记录这些情况,并定期检查日志中是否有任何异常活动。
    • 用户已经很久没有访问该站点了,令牌过期了。确保在客户端(cookies上正确的过期日期会导致用户重定向到登录页面,而不发送过期的令牌)和服务器端(每天扫描令牌列表并删除过期令牌的特殊任务?)
    • 可能您对令牌验证设置了一些其他限制——比如令牌不能过期,当前尝试必须来自与最初生成令牌的IP相同的IP
    • 发送请求时出现了一个错误,格式错误/损坏-对此无能为力,但将用户重定向到登录页面
    • 第三方正试图使用手工制作的令牌登录。如果你使用愚蠢的容易猜测的令牌(比如基于用户名、rot13、自己的超级特别可怕的“加密”等等),那么你迟早会被它咬到。UUID是一个很好的候选令牌的例子——顾名思义,它是一个通用的唯一标识符——这意味着没有两个用户应该拥有相同的UUID,而且UUID本身是随机的和长的
    AJAX应用程序中的安全性是一项严肃的业务-我见过太多的web应用程序存在易于利用的安全漏洞。。。确保你完全理解你在做什么和为什么。如果您有任何问题,请随时提问:)



    更新2015-06-12:

    这里是我找到的一个最好的链接(通过完整的
    实施
    )。一个完整的登录周期,维护一个cookie(
    会话ID

    如果您有一个名为“
    记住我”
    ”的选项,这会更好