首页 > 解决方案 > 如何在原生查询中使用@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

这也行不通。

如果有人知道如何解决此问题,那将非常有帮助。

标签: javamysqlsqljpa

解决方案


推荐阅读