带有Hibernate对象“get”方法的java JPA返回不同版本的一对一关系
我有一个与AuthorizationToken对象具有一对一关系的用户对象。这个项目的基础可以找到here
当用户登录时,将通过一对一地持久化链接到该用户的授权令牌(具有指定的到期时间)来创建新会话。出于开发目的,这个到期时间被设置为1个月,这在我的脑海中浮现。现在我的代币已开始过期,系统出现错误
用户登录时调用以下方法:
public AuthorizationToken createAuthorizationToken(User user) {
if(user.getAuthorizationToken() == null || user.getAuthorizationToken().hasExpired()) {
LOG.debug("UserToken has expired or is null, creating new token");
user.setAuthorizationToken(new AuthorizationToken(user, applicationConfig.getAuthorizationExpiryTimeInSeconds()));
userRepository.save(user);
}
return user.getAuthorizationToken();
}
这将返回当前令牌,如果它为空或过期,则返回一个新令牌。如果为null或过期,连接到用户的令牌也会被替换(setAuthorizationToken方法)。这样,我的新令牌在数据库中创建,并返回给客户机
然后,我们使用令牌为每个后续请求创建请求签名。服务器接收签名,使用存储的令牌进行复制,并检查它们是否相同以识别发送者
问题就出在这里,下面是一种用于在服务器中创建签名的方法:
private boolean isAuthorized(User user, AuthorizationRequestContext authorizationRequest, String hashedToken) {
String unEncodedString = composeUnEncodedRequest(authorizationRequest);
AuthorizationToken authorizationToken = user.getAuthorizationToken();
String userTokenHash = encodeAuthToken(authorizationToken.getToken(), unEncodedString);
if (hashedToken.equals(userTokenHash)) {
return true;
}
return false;
}
我使用的是同一个用户。getAuthorizationToken()方法用于原始登录过程,但它生成两个不同的值。login方法返回新创建的令牌,签名服务返回数据库中与该用户相关的第一个实例(该实例现在已过期,不应再映射到用户对象)。这里出了什么问题?这只是清理过期代币的问题,这样它们就不会被混淆了吗?我相信这是一个更深层次的问题,因为用户一次只能有一个身份验证令牌映射
如对代码有任何意见,我们将不胜感激
共 (0) 个答案