Eclipse 3.7 RCP アプリケーションの設定ページを作成できる可能性があることを発見しました。その方法については、こちら
で説明しています。
質問: セキュリティで保護されたストレージに、暗号化され
て保存される優先ページに入力フィールドを追加することは可能ですか?
これまで、セキュア ストレージをプログラムで使用する方法しか見つけられませんでした。
設定ページのエントリは自動的に保存されるため、これは私にとっては解決策ではありません。
解決策:
私は、Tonny Madsen が言ったことを実行しました:
SecureIPreferenceStore
であるクラスを拡張しましたIPreferenceStore
。- タイプのプライベート変数を使用して、新しいクラスがすべての設定を安全なストレージに保存するようにしました
ISecurePreferences
- 新しいクラスを設定ページの PreferenceStore として設定します
ScopedPreferenceStore の拡張
public class SecureIPreferenceStore extends ScopedPreferenceStore {
/* Current class will override all storage and loading methods, using this secure preferenceStore, to store all preferences in an encrypted way. */
private static final ISecurePreferences SECURE_PREFERENCES = SecurePreferencesFactory.getDefault();
/**
* Use this class to retrieve an instance of {@code SecureIPreferenceStore}, which will store all preferences in the default secure storage.
*
* @param context - the scope to store to, e.g. {@link org.eclipse.core.runtime.preferences.ConfigurationScope ConfigurationScope}
* or {@link org.eclipse.core.runtime.preferences.InstanceScope InstanceScope}
*
* @param qualifier - the qualifier to look up the preference node. An example of a qualifier would be the plug-in identifier that the preference is associated with,
* (e.g. the "org.eclipse.core.resources" uses the preference node in the instance scope where the preferences for "org.eclipse.core.resources" are stored)
*/
public SecureIPreferenceStore(IScopeContext context, String qualifier){
super(context, qualifier);
}
@Override
public void setValue(String name, boolean value) {
try {
SECURE_PREFERENCES.putBoolean(name, value, true);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void setValue(String name, double value) {
try {
SECURE_PREFERENCES.putDouble(name, value, true);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void setValue(String name, float value) {
try {
SECURE_PREFERENCES.putFloat(name, value, true);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void setValue(String name, int value) {
try {
SECURE_PREFERENCES.putInt(name, value, true);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void setValue(String name, long value) {
try {
SECURE_PREFERENCES.putLong(name, value, true);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void setValue(String name, String value) {
try {
SECURE_PREFERENCES.put(name, value, true);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean getBoolean(String name) {
Boolean result = false;
try {
result = SECURE_PREFERENCES.getBoolean(name, result);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
@Override
public double getDouble(String name) {
Double result = 0.0;
try {
result = SECURE_PREFERENCES.getDouble(name, result);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
@Override
public float getFloat(String name) {
Float result = 0.0f;
try {
result = SECURE_PREFERENCES.getFloat(name, result);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
@Override
public int getInt(String name) {
int result = 0;
try {
result = SECURE_PREFERENCES.getInt(name, result);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
@Override
public long getLong(String name) {
Long result = 0L;
try {
result = SECURE_PREFERENCES.getLong(name, result);
} catch (StorageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
FieldEditorPreferencePage での新しいクラスの使用:
@Override
public void init(IWorkbench workbench) {
setPreferenceStore(
new SecureIPreferenceStore(ConfigurationScope.INSTANCE,
"de.vogella.rcp.preferences.secure") );
setDescription("A demonstration of a preference page implementation");
}