在Angular 6中读取JESSIONID cookie

时间:2018-09-16 10:19:48

标签: angular cookies

我正在使用Spring Boot和Angular 6开发示例应用程序 我将Spring Security与基于表单的登录一起使用

我在身份验证时面临以下问题

1)用户使用基于表单的登录名进行身份验证,并在Cookie中返回JSESSIONID

2)当浏览器发送下一个请求时,JSESSIONID cookie在请求中未发送,导致基于cookie的身份验证失败

搜索了一下之后,我发现了Angular 6.x / Set jsessionid cookie的答案,该答案使用HttpInterceptor在请求中发送JSESSIONID cookie。

但是我的问题是:如何首先读取JSESSIONID cookie? 我们需要为此编写任何服务吗?

除上述方法外,我们可以使用{withCredentials = true}方法,但是它需要在代码中的每个请求中添加,这似乎不是有效的解决方案。

是否有其他方法可以解决此问题?

请帮助

1 个答案:

答案 0 :(得分:1)

  1. 成功进行身份验证后,您必须从后端获取JSESSIONID,然后尝试将该JSESSIONID存储在sesisonStorage中(一个STORAGE变量)。
  2. 接下来,正如您所说,我们肯定需要拦截器,因为对于病房中的下一个HTTP请求,我们需要设置此JSESSIONID并触发其余服务。
  3. 因此,您必须编写一个示例拦截器服务,该服务在HTTP调用期间进行拦截,这时将获取存储在STORE中的sessionId并设置此JSESSIONID并触发HTTP请求。您就能成功击中。

我可以给您提供示例示例,我们正在使用JWT身份验证 1.在login()期间,正在获取承载令牌并在会话存储中进行设置。 (具有加密格式。) 2.我写了如下的拦截器:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        let token= JSON.parse(this.store.getStoreItem('token'));
        request = request.clone({
            setHeaders: {
                Authorization: `Bearer ${token}`
            }
        });
    return next.handle(request);    
}
  1. 以上商店是商店服务的本地变量。 在以下情况下请参考:https://www.js-tutorials.com/javascript-tutorial/use-localstorage-sessionstorage-using-webstorage-angular4/

感谢和问候, Kishore Kumar。 K