싱글 사인온을 사용하는 로그인을 만들고 있습니다. 이렇게하려면 사용자가 로그인하는 회사가 SSO를 사용하는 경우 JavaFX WebView
이 열리고 사용자가 로그인 할 수 있습니다. 이 로그인은 완전히 웹 기반이므로 내 데이터를 캡처 할 필요가 없습니다.JavaFX 응용 프로그램에서 showAndWait 사용
두 클래스가 LoginManager
과 SSO
입니다. LoginManager
은 회사가 SSOEnabled인지 확인한 다음 SSO
으로 이동합니다. 여기에서 UI를 만든 다음 Platform.runLater()
을 사용하여 webview
이라는 메서드로 이동합니다. 그러나 내 프로그램은 initJFXPanel
으로 이동 한 다음 즉시 코드를 실행하기 위해 LoginManager
으로 돌아가므로 문제가됩니다.
내가 원하는 것은 특정 웹 페이지에 도달 할 때까지 SSO
을 모두 통과 한 다음 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 클래스 :
여기 내 코드입니다. 나는 하루 종일 붙어 있었고 무엇을해야할지 잘 모릅니다. 응용 프로그램이 스윙 응용 프로그램입니다, 당신은 WebView
를 사용해야하는 경우
1. 스윙과 자바 FX를 혼합해야합니까? 하나의 툴킷 만 사용할 수 있다면 더 쉬울 것입니다. 같은 애플리케이션에서'JFrame'과'Stage'를 모두 사용하고 싶지 않으므로 Swing을 사용하기로 결정했다면'WebView'를'JFXPanel'에 삽입하고'JFrame'에 표시하는 것은 올바른 접근법. 2.'LoginManager'에서'login()'메소드가 호출 된 스레드는 무엇입니까? –
@James_D 1. 아니요. 특별히 아무것도 사용할 필요가 없습니다. UI를 쓰지 않았고, 다른 누군가가 프로젝트를 포기하고 난 다음에 그 프로젝트를 포기 했으므로 변경하지 않아도됩니다. 그게 최선의 방법이라면 showAndWait을 구현하는 데 필요한 것입니다. 2. 나는 그것이 주된 것이라고 생각합니까? – Rachael
나머지 UI는 이미 Swing 또는 JavaFX로 작성되어 있습니까? –