3

我发现可以为我的 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");
    }

4

1 回答 1

3

这个我没试过,但是...

我会添加自己IPreferenceStore的安全存储,然后FieldEditors在首选项页面中使用常用的。

ScopedPreferenceStore最简单的方法是重写子类getStorePreferences()以返回一个新的IEclipsePreferences. EclipsePreferences这可能是覆盖各种internal...(...)接口方法的子类ISecurePreferences。鉴于内部方法与 的方法非常匹配ISecurePreferences,这可能不会非常困难:-)

于 2012-06-19T21:12:20.647 回答