我发现可以为我的 Eclipse 3.7 RCP 应用程序创建首选项页面。
如何做到这一点在此处描述。
问题:
是否可以在preferecne-page 中添加一个条目字段,该字段将被加密保存在安全存储中?
到目前为止,我只找到了一种以编程方式使用安全存储的方法。
这对我来说不是一个解决方案,因为首选项页面条目会自动保存。
解决方案:
我做到了,正如 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");
}