我想弄清楚JHipster是如何使用HTTP会话来保护应用程序和登录用户的,到目前为止,我已经了解了这样的流程。
1) 在登陆页上,home.component发送请求到 api/account
与会话cookie(如果有的话)
2)当没有会话时,我们可以填写登录表格,并登录后发送请求给 api/authentication
(需要步骤1的XSRF cookie)
3) 当步骤2成功后,前台将登录表单中的凭证发送至 api/account
但在这些步骤中,我们需要拦截后台发送的cookie,并将其发送回来,以便能够通过CSRF保护。 JHipster项目中的哪个部分负责这个工作? 是使用了webpackbrowsersync还是JHipster创建的一些Angular代码,我漏掉了?EDIT 我的问题出现在我对生成的项目进行了大量的修改,因为我想使用自定义模板和JHipster生成的服务。我已经将模板和jhipster服务链接起来了。
当我尝试登录用户时,我在spring控制台得到了这样的输出。Forbidden: Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'
从之前的请求到 api/authentication
我得到的回复是 Set-Cookie: XSRF-TOKEN=a129cb47-ec96-47be-aaae-69f90848c466; path=/
在浏览器网络中。
所以我想它设置的cookie名称是错误的。我已经在浏览器中手动更改了cookie名称。X-XSRF-TOKEN
然后重新发送请求 新的错误是这样的。Forbidden: Could not verify the provided CSRF token because your session was not found.
我不太了解这个流程 所以我无法发现问题所在 也许是我弄错了,也许是JHipster生成的一些代码造成的。在JHipster Angular前端有一些类,比如StateStorageService。它们是否参与了我的问题,或者它们与这个问题无关?
我在将一个移动应用连接到spring boot的后台时,也遇到了同样的问题。所以基本上angular在核心功能下有一个方法叫interceptors。在拦截器下,响应被收集,X-XSRF-TOKEN被捕获并更新到浏览器Cookie中,或者在我的例子中,Ionic Local Storage作为Cookie。