3

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

4

1 に答える 1

3

私はこれを試していませんが、...

IPreferenceStore安全なストレージ用に独自のものを追加してからFieldEditors、設定ページで通常のものを使用します。

ScopedPreferenceStoreこれを行う最も簡単な方法は、オーバーライドをサブクラス化getStorePreferences()して new を返すことIEclipsePreferencesです。EclipsePreferencesこれは、さまざまなメソッドをオーバーライドしてinternal...(...)にインターフェイスするサブクラスである可能性がありますISecurePreferences。内部メソッドが のメソッドとほぼ一致するという事実を考えるとISecurePreferences、これはおそらくそれほど難しくありません :-)

于 2012-06-19T21:12:20.647 に答える