使用playframework存储二进制密码哈希值

时间:2012-02-20 20:43:48

标签: java playframework

如何使用CRUD模块在二进制类型列中存储二进制哈希密码?在纯JAVA中通常我使用Apache Commons编解码器库将二进制哈希存储到postgresql bytea列中,但我不能生成带有Model类或二进制哈希的bytea列...请帮助。

在Model类中,我将属性设置为bytea,注释如下

@Required
@Column(nullable=false, columnDefinition="BYTEA NOT NULL")
@Password
public byte[] hash;

,但CRUD控制器不显示文本框以输入要进行哈希处理的密码输入。

1 个答案:

答案 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>

现在,密码字段应显示在其他表单字段之后。