如何在angular 2应用程序中读取服务器集cookie,以及如何在angular 2应用程序的请求中发送相同的cookie?

时间:2017-05-22 01:58:44

标签: rest angular session cookies

要求:我们的应用程序需要支持同一用户打开我们的Web应用程序作为单独的会话。

问题不在于如何在角度2中使用cookie,但是当角度2应用程序对服务器进行休息调用时,如何从HTTPServletRequest对象中获取cookie。

实施:服务器端restful应用程序有一个过滤器,用于在cookie中设置用户的浏览器会话,然后在HttpServletResponse中设置。 Angular客户端在应用程序引导程序上进行一次调用,该引导程序通过服务器过滤器在cookie中设置用户的浏览器会话。

问题陈述:角度客户端正在进行第一次休息呼叫,该呼叫通过服务器过滤器来设置浏览器会话cookie。当我打开chrome开发人员工具时,我确实看到其他api响应有“set-cookie”,它有服务器设置的cookie,但是当我在开发人员工具中打开应用程序标签时,我看不到任何cookie集。 之后,如果我通过角度应用程序进行任何其他休息调用,它不会在请求或请求标头中发送cookie。现在,我们的应用程序rest api依赖于此cookie值存在于HttpServletRequest中,现在它失败了。

有人可以指导我吗?我必须在角度2应用方面做错了,我无法捕捉到。 我试过传递“withCredentials = true”,但没有变化。

我注意到的另一件事是,如果我发出“GET”请求,那么我确实在请求标题中看到了cookie,但对于“POST”请求,我没有看到cookie的任何内容。

请建议。

设置Cookie的服务器端代码

String uniqueId = RandomStringUtils.randomAlphanumeric(32); 
Cookie userSessionCookie = new Cookie("userSessionId", uniqueId); 
if (getDefaultDomain() != null) { 
    userSessionCookie.setDomain(getDefaultDomain()); 
} 
httpServletResponse.addCookie(userSessionCookie); httpServletResponse.addHeader("Access-Control-Allow-Credenti‌​als", "true"); httpServletResponse.addHeader("access-control-allow-methods"‌​, "GET, POST, PUT, PATCH, DELETE, OPTIONS"); 
httpServletResponse.addHeader("Access-Control-Allow-Headers"‌​, "Content-Type, token,withCredentials");

有线2请求服务器从HttpServletRequest获取cookie

 renderFF() { 
         //prepare renderFInput object 
         var fcRenderInput = {}; 
         let headers = new Headers({ 'Content-Type': 'application/json' }); 
         let options = new RequestOptions({ headers: headers, withCredentials: true 
                }); 
         this._http.post('/api/v1/render/feature/fc',fcRenderI‌​nput,options) 
             .subscribe((res) => { 
                                  console.log(res.json()); 
          }); 
    } 

1 个答案:

答案 0 :(得分:0)

只是建议如果这只是一个浏览器和多个标签,在这种情况下,您可以在其中设置一些标志时使用本地存储。此外,当您尝试在新选项卡中打开相同的应用程序时。检查标志是否存在,用户是否尝试在同一浏览器的其他选项卡中打开相同的Web应用程序。您还需要删除在某个点之后设置的本地存储。 我希望你能得到一些解决这个问题的技巧:)