2016-07-04 4 views
1

JPasswordフィールドに値を設定する必要があります。しかし、それは方法がないように見えるsetPassword (char [])JPasswordフィールドに値を設定するにはどうすればよいですか?

これの唯一の方法はsetTextです。しかし、私はフィードをする必要があります

getTextは廃止予定ですので、setTextも廃止予定です。ここで

だから同じことをするとき、私 setTextが起こるん

When calling getText you get a String (immutable object) that may not be changed (except reflection) and so the password stays in the memory until garbage collected

answer on stackoverflow

からの抜粋です。私は Stringをフィードし、それはメモリにとどまります。 setTextはなぜ非推奨ですか? setPassword (char [])メソッドがないのはなぜですか?

+1

ここでは、フィールドの 'PlainDocument'とchar配列を使用する例を示します(ドキュメントが読み込まれるとクリアすることができます):http://stackoverflow.com/questions/26975275/fill-a-jpasswordfield -programmatically-without-string-objectを作成する – Berger

+0

それはうまくいくようです。 – john

答えて

1

setPassword(char [])メソッドがないのはなぜですか?

最後に文字列または文字配列を挿入するかどうかは同じです。

...ですから、setTextも廃止予定です。

いいえ、そうではありません。通常、ユーザーはパスワードを入力します。パスワードをどこかに保存しておけば、パスワードを送信する前に暗号化してこのフィールドに挿入する必要があります。

+0

ありがとうございました。データベースの 'byte []'にパスワードを保存します。そして、それを 'char []'に変換します。私は、パスワードを 'JPasswordField'にレンダリングするためのメソッド' setPassword(char []) 'を持つことを期待していました。しかし、新しい文字列(bytePassword、 "UTF-8") 'のように' byte [] 'を' String'に変換してから 'JPasswordField'に送る必要があるようです。これはメモリにパスワード 'String'を作成します。ガーベジコレクタによって取り出されない限り、誤ってコンソールにフラッシュされる可能性があります。 – john

+1

johnが言っていたように、パスワードを' String'と指定すると強制的に目的を破り、IMO 'setText'は非推奨です。とにかくパスワードを含む 'String'を作成しなければならない場合、' char [] 'を使うセキュリティに依存するのはなぜですか? –

関連する問題