私は更新が完了した後にトークンをリフレッシュし、リフレッシュされたトークンをクライアントに送り返すべきだと思います。
@RequestMapping(value = "/account", method = RequestMethod.POST)
public ResponseEntity<?> updateAccount(@RequestBody UserDetailsBean userDetailsBean, HttpServletRequest request,
HttpServletResponse response)
{
try
{
UserAccessDetails accessDetails = getLoggedInUser();
UserDetailsBean updatedUserBean = userService.updateAccount(userDetailsBean, accessDetails);
// send updated jwt incase of mobile number update by user
response.addHeader(SecurityConstants.HEADER_STRING,
SecurityConstants.TOKEN_PREFIX + refreshJWT(updatedUserBean.getMobileNumber()));
return buildResponse(updatedUserBean);
}
catch(DataException e)
{
return buildError(e);
}
}
private String refreshJWT(String subject)
{
return Jwts.builder().setSubject((subject))
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SecurityConstants.SECRET).compact();
}
これは機能しています。誰かが清潔で業界標準のアプローチを持っている場合は、指定してください。
ユーザーがフィールドを更新するたびに、変更可能な 'sub'フィールドに最新の' userName'を含む新しい 'JWT'を作成しています。 –