2012-02-20 23 views
1

我如何在CRUD模塊的二進制類型列中存儲二進制哈希密碼?在純JAVA中通常我使用Apache Commons編解碼器庫將二進制散列存儲到postgresql bytea列中,但是我無法生成帶有Model類或二進制散列的bytea列...請任何幫助。用playframework存儲二進制密碼哈希

在模型類別i中設置的屬性作爲BYTEA與註釋如下

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

,但CRUD控制器不顯示的文本框把輸入密碼被散列的輸入。

回答

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()); 
} 

UPDATE:

要讓@Transient場出現在您的CRUD視圖中,您需要自定義控制器的CRUD的blank視圖。打開外殼/命令提示符並執行以下命令(用你的控制器類的實際名稱取代「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> 

密碼字段現在應該出現在其他表單字段後。

+0

感謝您的回覆。我正在探索在插入時觸發哈希的數據庫方式,但我會定義嘗試您的響應。 – JuanToroMarty 2012-02-21 12:05:23

+0

@Transient字段不顯示在Users CRUD表單中。我做錯了什麼? – JuanToroMarty 2012-02-21 15:15:18

+0

不,你說得對,我忘了@Transient字段不會自動出現在視圖中。我用補充說明更新了我的答案。 – Tommi 2012-02-22 06:11:15