我正在将Spring Boot与Angular 9和STATELESS会话实现一起使用。该应用程序已成功执行登录和注册功能。字符串启动会在每个登录请求上生成令牌(JWT)。登录后,当我尝试运行第二个TAB的应用程序时,再次要求我登录。为解决此问题,我将令牌保存在Localstorage中,然后在单击另一个TAB时,角度代码便可以从Localstorage中选择令牌。但是经过一些研发,我才知道应该使用HTTPOnly Cookie代替Localstorage。有人可以帮我在Angular 9和Spring Boot中使用仅HTTP的cookie。谢谢
答案 0 :(得分:0)
此处是示例代码,用于创建HTTP唯一Cookie并将其附加到您的响应中。至少您需要传递HttpServletResponse来将cookie附加到标题。您可以使用ResponseEntity或其他方式返回响应正文中的任何内容。
@PostMapping("/refresh_token")
public ResponseEntity refreshToken(HttpServletResponse response)
{
//create cookie for refresh token
Cookie refreshTokenCookie = new Cookie("refresh_token", refreshToken);
refreshTokenCookie.setHttpOnly(true);
refreshTokenCookie.setSecure(true); //only allows HTTPS
refreshTokenCookie.setPath("/");
refreshTokenCookie.setDomain("api.lsp.com"); //restrict domain
response.addCookie(refeshTokenCookie);
return ResponseEntity(HttpStatus.OK);
}
答案 1 :(得分:0)
确实,刷新令牌应该设置为 cookie http only 而不是本地存储,因为这里有很好的解释JWT refresh token flow 为了回答您的问题,@user521990 的回复是 cookie 实现的一个很好的例子:
refreshTokenCookie.setSecure(false);
,因为您没有使用 HTTPSrefreshTokenCookie.setPath("/");
将使其成为可随处访问的全局 cookie在开发模式下,您需要一些 CORS 配置才能在浏览器中设置 cookie。至少您需要在 Java 控制器 @CrossOrigin(origins = "http://localhost:4200", allowCredentials = "true")
中进行以下配置(或者您可以在不同的文件中更全局地进行此配置)
最后在 Angular 应用程序中,向需要设置或使用 httponly cookie 的请求添加选项 { withCredentials: true }