jpa中用@ColumnTransformer注解将name字段加密,可是在数据库中解密返回的是正常值,而经过java解析后,在前端页面中还是出现了字符乱码的情况
@Column(name = "password")
@NotBlank(message = "名字不能为空!")
@Length(min = 2, max = 6)
@ColumnTransformer(
write = "HEX(AES_ENCRYPT(?, 'helloworld'))",
read = "AES_DECRYPT(UNHEX(name),'helloworld')"
)
private String name;
解决方法:
-
首先mysql的数据库的编码格式不能是utf8,需要是utf8mb4才行。(待验证)
-
其次在查询的时候,使用cast( )函数将查询字段作为一个整体查询。
@Column(name = "password")
@NotBlank(message = "名字不能为空!")
@Length(min = 2, max = 6)
@ColumnTransformer(
write = "HEX(AES_ENCRYPT(?, 'helloworld'))",
read = "CAST(AES_DECRYPT(UNHEX(name),'helloworld') as char)"
)
private String name;
参考:
https://blog.csdn.net/tiancao222/article/details/85699796#commentBox