AngularJs 和 Java Servlet 技术

AngularJs and Java Servlet technology

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

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

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

一个例子将不胜感激。

我的建议是使用 JWT tokens with Satellizer library which simplifies your work. After user has been logged in and you issued JWT token to him, he should pass back this token on every http request, (Satellizer injects it automatically after successful login). You need to validate it and permit/restrict user's action accordingly. There're few Java libraries which simplifies work with JWT tokens on a server side. I've used in a couple of my projects jose4j 库,并获得积极的体验。

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

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

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

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

    b。如果失败提示信息并停留在login.html页面。

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

到目前为止看起来不错而且非常简单。