2016-01-04 57 views
0

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

  1. 我张贴登录表单给servlet进行认证时,servlet与权限对象和JSESSIONID回复。当我离开并返回页面时,如何避免重新登录?我需要另一个cookie来存储用户名/密码吗?

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

一个例子将非常感激。

回答

0

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

  1. login.html的帖子用户名/密码形式的servlet。 servlet验证凭证,如果成功则启动一个新会话(这会导致jsessionid cookie)。如果身份验证失败,则返回HttpServletResponse.SC_UNAUTHORIZED。

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

    b。如果失败提示消息并保留在login.html页面上。

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

迄今为止它看起来不错并且非常直接。

2

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

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

+0

这是一个很好的领导,谢谢。但在这一点上,我正在寻找一种基于cookie的方法,而不是JWT。 – JavaHead