シングルサインオンを使用するログインを作成しています。これを行うには、ユーザーがログインする会社がSSOを有効にしている場合は、JavaFX WebView
が開き、ユーザーはログインできるようになります。このログインは完全にWebベースなので、私の側で実際にデータをキャプチャする必要はありません。JavaFXアプリケーションでshowAndWaitを使用する
私は2つのクラス、LoginManager
とSSO
を持っています。 LoginManager
は、会社がSSOEnabledであるかどうかを確認し、そうであればSSO
に移動します。ここから、UIを作成してPlatform.runLater()
を使用して、webview
というメソッドを開きます。しかし、私のプログラムはinitJFXPanel
に行き、即座にLoginManager
に戻ってコードを実行すると問題が発生します。
SSO
をすべて通過して特定のWebページに到達し、次にframe.dispose()を使用してから、LoginManager
に戻って続行してください。私はStage
とshowAndWait()
を使用する必要があると思うが、私はこれについてどうやって行くのかは分からない。
私はinitJFXPanel
内のステージを作成しようとしたが、それが何かをする機会を得る前に、それが戻ってLoginManager
に行くように、これは動作しませんでした、と私はまたcreatePopup
のステージを設定しようとしたが、私は何を使用するかわかりませんでしたステージやシーンとして。
LoginManagerクラスすべてのヘルプは高く評価され
public class SSO {
private JFrame frame;
private JFXPanel fxPanel;
private JPanel containerPanel;
final static String WEBVIEW = "WebView";
public SSO(){
createPopup();
}
private void createPopup(){
Dimension size = new Dimension(480, 80);
frame = new JFrame("Web Login");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
containerPanel = new JPanel(new CardLayout());
fxPanel = new JFXPanel();
fxPanel.setSize(size);
Platform.runLater(() -> initJFXPanel(frame, fxPanel));
containerPanel.add(fxPanel, WEBVIEW);
frame.add(containerPanel, BorderLayout.CENTER);
frame.setPreferredSize(size);
frame.setResizable(false);
frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void initJFXPanel(final JFrame frame, final JFXPanel fxPanel){
Group group = new Group();
Scene scene = new Scene(group);
fxPanel.setScene(scene);
WebView webview = new WebView();
group.getChildren().add(webview);
webview.setMinSize(500, 640);
webview.setMaxSize(500, 640);
CookieManager cookieManager = new CookieManager();
java.net.CookieHandler.setDefault(cookieManager);
webview.getEngine().load("http://google.com/");
if(webview.getEngine().getLocation().equalsIgnoreCase("cookie url")) {
// harvest the cookies
}
else if(webview.getEngine().getLocation().equalsIgnoreCase("end url")) {
frame.dispose();
}
}
}
public class LoginManager {
private boolean bSSOEnabled = true;
private void Login() {
// get company details
if(bSSOEnabled) {
new SSO();
}
// once SSO is done, continue with execution
}
}
SSOクラス:
は、ここに私のコードです。私は一日中このことに固執しており、何をすべきか分からない。
1.あなたは、SwingやJavaFXのを混在させる必要がありますか? 1つのツールキットしか使用できないのであれば、より簡単になります。同じアプリケーションで 'JFrame'と' Stage'の両方を使いたくないのであれば、Swingを使うことを約束しているなら 'JFXPanel'に' WebView'を埋め込み、 'JFrame'に表示するのは正しいアプローチ。 2. 'LoginManager'の' login() 'メソッドはどのスレッドから呼び出されますか? –
@James_D 1.いいえ特に何も使う必要はありません。私はUIを書いていなかった、他の誰かがやった、プロジェクトを放棄した後、私はそれで集中していたので、それが最良の方法であれば、showAndWaitを実装するために必要です。2.私はそれがメインのものだと思いますか? – Rachael
残りのUIは既にSwingまたはJavaFXで記述されていますか? –