如何使用CRUD模块在二进制类型列中存储二进制哈希密码?在纯JAVA中通常我使用Apache Commons编解码器库将二进制哈希存储到postgresql bytea列中,但我不能生成带有Model类或二进制哈希的bytea列...请帮助。
在Model类中,我将属性设置为bytea,注释如下
@Required
@Column(nullable=false, columnDefinition="BYTEA NOT NULL")
@Password
public byte[] hash;
,但CRUD控制器不显示文本框以输入要进行哈希处理的密码输入。
答案 0 :(得分:2)
为密码创建单独的@Transient String
字段,从CRUD输入填写:
@Password
@Transient
public String password;
然后从哈希字段中删除@Required
注释。它根本不需要从CRUD填写。
接下来,创建一个新方法并使用@PrePersist
对其进行注释,以便在保存模型之前执行它:
@PrePersist
public void prePersist() throws Exception {
this.hash = Codec.hexMD5(this.password.getBytes());
}
更新:
要在CRUD视图中显示@Transient
字段,您需要自定义控制器的CRUD blank
视图。打开shell /命令提示符并执行以下命令(将“your_controller”替换为控制器类的实际名称):
play crud:ov --template your_controller/blank
这应该将CRUD blank.html模板复制到应用程序中的views/your_controller/blank.html
。打开该文件,查找#{crud.form /}
标记,并在其下方添加以下代码:
<div class="crudField crud_password">
<label for="object_password">&{'label.password'}</label>
<input id="object_password" type="password" name="object.password" value="" />
<span class="crudHelp"></span>
</div>
现在,密码字段应显示在其他表单字段之后。