问题
我需要在实体级别(而不是控制器级别)散列用户密码,@Converter 似乎是正确的选择,使用 JavaEE,没有 spring。
给我看代码
这里使用 Jpa AttributeConverter 的代码:
import java.nio.charset.StandardCharsets;
import javax.inject.Inject;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.hash.Hashing;
@Converter
public class JPACryptoConverter implements AttributeConverter<String, String> {
private static Logger logger = LoggerFactory.getLogger(JPACryptoConverter.class);
private String salt = "helloWorld";
@Inject
private UserRepository userRepository;
@Override
public String convertToDatabaseColumn(String sensitive) {
return Hashing.sha512().hashString(salt + sensitive, StandardCharsets.UTF_8).toString();
}
@Override
public String convertToEntityAttribute(String sensitive) {
String tmp = Hashing.sha512().hashUnencodedChars(sensitive).toString();
return tmp.substring(0, salt.length());
}
}
我想将 salt 字符串替换为用户表上实体定义的 salt,但如何获取此信息?
为了获取此信息,我需要使用实体 id 访问 userRepository 并获取 salt,有没有办法使用 @Converter 查找此信息?
注意:我尝试过使用生命周期侦听器、预加载、预更新、预持久化,但是因为我使用的是 jpa Criteria,所以在查询之后调用侦听器
幕布斯6054654
RISEBY
相关分类