java - 如何在原生查询中使用@ColumnTransformer 加密和解密?
问题描述
我需要加密mysql数据库表中的所有值
| userId | email | userAge | firstName| lastName | userType |
|--------|--------------|---------|-----------|----------|--------- |
| 1 |john@gmail.com| 20 | John | Smith | 1 |
我的用户类如下
@Entity
@Table(name = "user")
public class User{
@Id @GeneratedValue
@Column(name = "userId ")
private int userId;
@Column(name = "firstName")
private String firstName;
@Column(name = "email")
private String email;
@Column(name = "lastName")
private String lastName;
@Column(name = "userType ")
private String userType ;
// getters and setters
}
我打算使用@ColumnTransformer
@Column
@ColumnTransformer(
read = "cast(aes_decrypt(email, 'secretkey') as char(255))",
write = "aes_encrypt(?, 'secretkey')"
)
private String email;
这是加密工作。而且,nativeQueries 有很多用法。但是像这样的方法只返回加密的电子邮件。
@Query(nativeQuery = true , value = "select * from user where userId =?1")
Optional<User> getUserByUserId(String userId);
而且我还有其他使用电子邮件的方法,如下所示:
@Query(nativeQuery = true , value = "select * from user where email=?1 and
firstName =?2")
Optional<User> getUserByEmailAndFirstName(String email, String firstName);
为此,我尝试使用这样的东西:
select * from users where email= aes_encrypt(?, 'secretkey') and firstName =?2
这也行不通。
如果有人知道如何解决此问题,那将非常有帮助。
解决方案
推荐阅读
- r - 为什么 R 代码可以在本地工作,但不能在 Docker 中运行?
- state-machine - 有没有办法在 xState 的层次状态节点中进行保护转换
- php - MAMP 上的 cURL 不工作,但相同的脚本在 Apache 的服务器上工作
- bash - 为什么在 VLC 的 DBus 中使用 Seek 方法会出现这么多错误?
- python - 将格式化为 Pandas DataFrame 的字符串转换为实际的 DataFrame
- python - 如何使用熊猫获取数据框列(具有字符串数组)中每个元素的频率?
- bash - 使用 Shell 脚本在新文件中打印带有一些文本的日期
- powershell - SharePoint Online 更改外观主题不起作用
- php - 如何使用正则表达式按字符拆分字母数字字符串?
- docker - 允许 Docker 容器仅与主机通信