【问题标题】:AngularJs and Java Servlet technologyAngularJs 和 Java Servlet 技术
【发布时间】:2016-04-08 15:31:17
【问题描述】:

我正在尝试集成一个非常古老的 Java Web 应用程序和一个 AngularJs 前端。我不能使用 Spring 框架,基本上必须手动编写代码。以下是我的具体问题:

  1. 我将登录表单发布到 servlet 进行身份验证,servlet 使用权限对象和 Jsessionid 回复。当我离开并返回页面时如何避免重新登录?我需要另一个 cookie 来存储用户名/密码吗?

  2. 如何使用此架构提供 CSRF 保护?

非常感谢您提供一个示例。

【问题讨论】:

    标签: java angularjs cookies jsessionid


    【解决方案1】:

    我实际上实现了两种解决方案,一种使用 JWT,另一种使用使用 Jsessionid cookie 的传统 Java Servlet 实现。到目前为止,我觉得 cookie 更干净,所以这里有一些细节:

    1. Login.html 将用户名/密码表单发布到 servlet。 servlet 验证凭据,如果成功则启动一个新会话(这会产生一个 jsessionid cookie)。如果身份验证失败,则返回 HttpServletResponse.SC_UNAUTHORIZED。

      一个。如果回调成功,客户端会将浏览器重定向到我的 application.html 页面。

      b.如果失败会提示一条消息并停留在 login.html 页面上。

    2. 当 application.html 页面加载时,它会立即向登录 servlet 发送一个虚拟获取请求,以确保会话仍然有效。如果是,它会加载页面的其余部分,如果不是,则重定向回登录页面。
    3. 使用检查会话 ID 的 Auth 过滤器以同样的方式保护 Web 服务。

    到目前为止,它看起来不错,而且非常直接。

    【讨论】:

      【解决方案2】:

      我的建议是使用JWT 令牌和Satellizer 库,这可以简化您的工作。在用户登录并且您向他发出 JWT 令牌后,他应该在每个 http 请求中传回此令牌(Satellizer 在成功登录后自动注入它)。您需要对其进行验证并相应地允许/限制用户的操作。很少有 Java 库可以简化在服务器端使用 JWT 令牌的工作。我已经在我的几个项目中使用了jose4j 库,并且对它有积极的体验。

      Satellizer 和 jose4j 在他们的 wiki 上都有很好的示例如何使用它们。

      【讨论】:

      • 这是一个很好的线索,谢谢。但此时我正在寻找一种基于 cookie 的方法,而不是 JWT。
      猜你喜欢
      • 2014-08-11
      • 2012-05-05
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2013-02-19
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多