https://wiki.eclipse.org/Scout/Concepts/Securityにあるスカウトのデフォルトのセキュリティ概念に基づく認証が必要です。
私がやったこと:
BasicSecurityFilter
サーバーに追加しましたplugin.xml
:
<extension name="" point="org.eclipse.scout.rt.server.commons.filters">
<filter aliases="/ /process /remotefiles /updatesite" class="org.eclipse.scout.http.servletfilter.security.BasicSecurityFilter" ranking="30"></filter>
</extension>
そして、それを有効にしましたconfig.ini
:
org.eclipse.scout.http.servletfilter.security.BasicSecurityFilter#active=true
org.eclipse.scout.http.servletfilter.security.BasicSecurityFilter#realm=Development
org.eclipse.scout.http.servletfilter.security.BasicSecurityFilter#users=TEST\=admin
クライアント側では、次のように追加しInternalNetAuthenticator
ましたplugin.xml
:
<extension point="org.eclipse.core.net.authenticator">
<authenticator class="org.eclipse.scout.rt.ui.rap.login.internal.InternalNetAuthenticator"</authenticator>
</extension>
クライアントでデフォルトのオーセンティケータとして設定しますActivator
:
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
InternalNetAuthenticator authenticator = new InternalNetAuthenticator();
InternalNetAuthenticator.setDefault(authenticator);
}
何が起こるのですか:
BasicSecurityFilter.negotiate()
アプリケーションにアクセスするときに呼び出されます (最初のロード、例http://localhost:8015/web
)InternalNetAuthenticator.getPasswordAuthentication()
のネゴシエーションがBasicSecurityFilter
失敗したときに呼び出されます (これは、ユーザーとパスワードが HTTP ヘッダーで見つからないか、ユーザーとパスワードが無効な場合です)。InternalNetAuthenticator.showModalDialog(status, display)
Display.getDefault() または Display.getCurrent() は常に を返すため、RAP レベル ( を参照) でダイアログを開くことはできませんnull
。- これは、すべての UI 操作 (ダイアログを開くなど) が UIThread に表示されなければならないためです ( の java-doc を参照
Display.getDefault()
)。 - はUIThread
InternalNetAuthenticator
でインスタンス化されますが (「 」を参照Activator.start()
)、 UIThread では呼び出されません! どうして???
- これは、すべての UI 操作 (ダイアログを開くなど) が UIThread に表示されなければならないためです ( の java-doc を参照
- オブジェクトを返すと
PasswordAuthentication
、HTTP ヘッダー内の資格情報が次のBasicSecurityFilter.negotiate()
呼び出しに提供されます。
BasicSecurityFilter.negotiate()
指定された資格情報で再度呼び出されます。
失敗するもの:
InternalNetAuthenticator.showModalDialog(status, display)
が UI スレッドで呼び出されないため、次のようになりますNullPointerException
。
java.lang.NullPointerException
at org.eclipse.scout.rt.ui.rap.login.internal.InternalNetAuthenticator.showModalDialog(InternalNetAuthenticator.java:102)
...
私がすでに検討したこと:
- 一般情報
https://wiki.eclipse.org/Scout/HowTo/3.9/Extending_the_login_dialog
https://wiki.eclipse.org/Scout/Concepts/Securit
- UI スレッドの問題
https://www.eclipse.org/forums/index.php/t/440290/
https://www.eclipse.org/rap/developers-guide/devguide.php?topic=threads.html
Activator.start()
独自のオーセンティケーターを作成し、次のようにコンストラクターにパラメーターを追加することにより 、メソッドでオーセンティケーターをインスタンス化するときに、既に UI スレッドを格納しようとしました。MyAuthenticator my_authenticator = new MyAuthenticator(Thread.currentThread());
- しかし、これは
IllegelStateException
またはそのようなものを引き起こします。したがって、この方法では UI スレッドにアクセスできません。
BasicSecurityFilter
RAP レベル (plugin.xml
RAP バンドル内) を使用すると、システムのデフォルトのログイン ダイアログを使用できるようになります 。- しかし、他のサーバー側システムにアクセスできるカスタム SecurityFilter が必要なため、サーバー側に表示する必要があり、RAP/クライアント側の SecurityFilter はオプションではありません!
概要
私が見ることができるのは、UIスレッドで問題を解決することが、この問題を前進させるための好ましい方法であることです.
eclipse-scout-RAP 環境でカスタム ログイン ダイアログを表示する代替ソリューションも受け入れます。