fix(CasdoorLoginWindow,resources): 修复了内嵌浏览器创建失败无法登录问题,完善登录逻辑的错误处理,添加无内嵌浏览器时使用默认浏览器登录的逻辑,补提交上次缺失的资源文件,为内嵌浏览器添加返回登录界面功能
This commit is contained in:
@@ -44,6 +44,7 @@ import java.awt.event.WindowEvent;
|
||||
import java.io.*;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.lang.management.*;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
@@ -83,7 +84,7 @@ public class AxisInnovatorsBox {
|
||||
private final boolean isDebug;
|
||||
private static DebugWindow debugWindow;
|
||||
|
||||
private LoginData loginData;
|
||||
private static LoginData loginData;
|
||||
|
||||
public AxisInnovatorsBox(String[] args, boolean isDebug) {
|
||||
this.args = args;
|
||||
@@ -92,9 +93,12 @@ public class AxisInnovatorsBox {
|
||||
organizingCrashReports(throwable instanceof Exception ?
|
||||
(Exception) throwable : new Exception(throwable));
|
||||
});
|
||||
|
||||
// 初始化,这里为了能够在登录窗口使用主题,特意将初始化放在构造函数中
|
||||
main.initLog4j2();
|
||||
main.setTopic();
|
||||
// 加载登录信息,如果没有,弹出登录弹窗,后续可以删掉默认弹出
|
||||
// TODO: login window
|
||||
// TODO: login window should not be show when AxisInnovatorsBox initialize,
|
||||
// it should be show when user click login button.
|
||||
try {
|
||||
StateManager stateManager = new StateManager();
|
||||
String token = stateManager.getState("loginToken");
|
||||
@@ -107,22 +111,29 @@ public class AxisInnovatorsBox {
|
||||
} else if (loginResult.success()) {
|
||||
loginData = loginResult.loginData();
|
||||
stateManager.saveState("loginToken", loginResult.token());
|
||||
logger.info("Login result: token: " + loginResult.token() + ", user: " + loginResult.user());
|
||||
logger.info(
|
||||
"Login result: token: " + loginResult.token() + ", user: " + loginResult.user());
|
||||
JOptionPane.showMessageDialog(null, "登录成功", "登录",
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
} else {
|
||||
// 登录失败,弹出错误提醒,这里只是输出登录错误信息
|
||||
logger.error("Login error: " + loginResult.message());
|
||||
JOptionPane.showMessageDialog(null, "登录失败: \n" + loginResult.message(), "登录失败", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(null, "登录失败: \n" + loginResult.message(), "登录失败",
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
} else {
|
||||
CasdoorServer casdoorServer = new CasdoorServer();
|
||||
User user = casdoorServer.parseJwtToken(token);
|
||||
loginData = new LoginData(token, user);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
logger.error("InterruptedException: Failed to load login information", e);
|
||||
} catch (InvocationTargetException e) {
|
||||
logger.error("InvocationTargetException: Failed to load login information", e);
|
||||
} catch (Exception e) {
|
||||
logger.error("Failed to load login information", e);
|
||||
}
|
||||
logger.error("Exception: Failed to load login information", e);
|
||||
} // 添加了更详细的异常处理
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -978,8 +989,6 @@ public class AxisInnovatorsBox {
|
||||
|
||||
main = new AxisInnovatorsBox(args,isDebug);
|
||||
try {
|
||||
main.initLog4j2();
|
||||
main.setTopic();
|
||||
|
||||
List<Map<String, String>> validFiles = ArgsParser.parseArgs(args);
|
||||
for (Map<String, String> fileInfo : validFiles) {
|
||||
@@ -993,6 +1002,7 @@ public class AxisInnovatorsBox {
|
||||
}
|
||||
|
||||
main.thread = new Thread(() -> {
|
||||
|
||||
try {
|
||||
// 主任务1:加载插件
|
||||
logger.info("Loaded plugins Started");
|
||||
|
||||
@@ -91,6 +91,37 @@ public class CasdoorLoginWindow {
|
||||
}
|
||||
|
||||
private void initUI() {
|
||||
if (browser == null) {
|
||||
try {
|
||||
// 初始化浏览器
|
||||
CefApp cefApp = CefAppManager.getInstance();
|
||||
CefClient client = cefApp.createClient();
|
||||
browser = client.createBrowser(
|
||||
casdoorServer.getSigninUrl(),
|
||||
false,
|
||||
false);
|
||||
} catch (Throwable e) {
|
||||
logger.error("Failed to initialize CefBrowser", e);
|
||||
// 浏览器初始化失败,弹出默认浏览器替代,并提示用户
|
||||
// 如果浏览器初始化失败,改为在默认浏览器打开登录页面
|
||||
openCasdoorLoginPageInDefaultBrowser();
|
||||
// JOptionPane.showMessageDialog(dialog,
|
||||
// "浏览器初始化失败,已在默认浏览器打开登录页面,请手动完成登录。",
|
||||
// "内嵌浏览器初始化失败",
|
||||
// JOptionPane.WARNING_MESSAGE
|
||||
// );
|
||||
String message = "浏览器初始化失败,已在默认浏览器打开登录页面,请手动完成登录。\n或者手动复制下面链接在浏览器打开进行登录:\n"
|
||||
+ casdoorServer.getSigninUrl();
|
||||
JTextArea textArea = new JTextArea(message);
|
||||
textArea.setEditable(false);
|
||||
textArea.setLineWrap(true);
|
||||
textArea.setWrapStyleWord(true);
|
||||
textArea.setBackground(null);
|
||||
textArea.setSize(600, 400);
|
||||
JOptionPane.showMessageDialog(dialog, new JScrollPane(textArea), "内嵌浏览器初始化失败", JOptionPane.WARNING_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
dialog = new JDialog();
|
||||
dialog.setTitle("AXIS 认证");
|
||||
dialog.setSize(500, 750);
|
||||
@@ -100,42 +131,40 @@ public class CasdoorLoginWindow {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
|
||||
if (browser != null) {
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
|
||||
|
||||
JButton backButton = new JButton("");
|
||||
backButton.setIcon(LoadIcon.loadIcon("back.png", 24));
|
||||
backButton.addActionListener(e -> browser.goBack());
|
||||
backButton.setFocusPainted(false);
|
||||
backButton.setBorderPainted(false);
|
||||
JButton forwardButton = new JButton("");
|
||||
forwardButton.setIcon(LoadIcon.loadIcon("forward.png", 24));
|
||||
forwardButton.addActionListener(e -> browser.goForward());
|
||||
forwardButton.setFocusPainted(false);
|
||||
forwardButton.setBorderPainted(false);
|
||||
JButton refreshButton = new JButton("");
|
||||
refreshButton.setIcon(LoadIcon.loadIcon("refresh.png", 24));
|
||||
refreshButton.addActionListener(e -> browser.reload());
|
||||
refreshButton.setFocusPainted(false);
|
||||
refreshButton.setBorderPainted(false);
|
||||
// 将按钮面板添加到主panel顶部
|
||||
buttonPanel.add(backButton);
|
||||
buttonPanel.add(forwardButton);
|
||||
buttonPanel.add(refreshButton);
|
||||
panel.add(buttonPanel, 0);
|
||||
JButton homeButton = new JButton("");
|
||||
homeButton.setIcon(LoadIcon.loadIcon("material-symbols-home.png", 24));
|
||||
homeButton.addActionListener(e -> browser.loadURL(casdoorServer.getSigninUrl()));
|
||||
homeButton.setFocusPainted(false);
|
||||
homeButton.setBorderPainted(false);
|
||||
JButton backButton = new JButton("");
|
||||
backButton.setIcon(LoadIcon.loadIcon("material-symbols-back.png", 24));
|
||||
backButton.addActionListener(e -> browser.goBack());
|
||||
backButton.setFocusPainted(false);
|
||||
backButton.setBorderPainted(false);
|
||||
JButton forwardButton = new JButton("");
|
||||
forwardButton.setIcon(LoadIcon.loadIcon("material-symbols-forward.png", 24));
|
||||
forwardButton.addActionListener(e -> browser.goForward());
|
||||
forwardButton.setFocusPainted(false);
|
||||
forwardButton.setBorderPainted(false);
|
||||
JButton refreshButton = new JButton("");
|
||||
refreshButton.setIcon(LoadIcon.loadIcon("material-symbols-refresh.png", 24));
|
||||
refreshButton.addActionListener(e -> browser.reload());
|
||||
refreshButton.setFocusPainted(false);
|
||||
refreshButton.setBorderPainted(false);
|
||||
// 将按钮面板添加到主panel顶部
|
||||
buttonPanel.add(homeButton);
|
||||
buttonPanel.add(backButton);
|
||||
buttonPanel.add(forwardButton);
|
||||
buttonPanel.add(refreshButton);
|
||||
panel.add(buttonPanel, 0);
|
||||
|
||||
if (browser == null) {
|
||||
// 初始化浏览器
|
||||
CefApp cefApp = CefAppManager.getInstance();
|
||||
CefClient client = cefApp.createClient();
|
||||
browser = client.createBrowser(
|
||||
casdoorServer.getSigninUrl(),
|
||||
false,
|
||||
false);
|
||||
panel.add(browser.getUIComponent());
|
||||
}
|
||||
|
||||
panel.add(browser.getUIComponent());
|
||||
dialog.add(panel);
|
||||
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
|
||||
@Override
|
||||
@@ -152,7 +181,9 @@ public class CasdoorLoginWindow {
|
||||
if (server == null) {
|
||||
startLocalCallbackServer();
|
||||
}
|
||||
browser.loadURL(casdoorServer.getSigninUrl());
|
||||
if (browser != null) {
|
||||
browser.loadURL(casdoorServer.getSigninUrl());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
BIN
src/main/resources/icons/material-symbols-back.png
Normal file
BIN
src/main/resources/icons/material-symbols-back.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
src/main/resources/icons/material-symbols-forward.png
Normal file
BIN
src/main/resources/icons/material-symbols-forward.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
src/main/resources/icons/material-symbols-home.png
Normal file
BIN
src/main/resources/icons/material-symbols-home.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
BIN
src/main/resources/icons/material-symbols-refresh.png
Normal file
BIN
src/main/resources/icons/material-symbols-refresh.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Reference in New Issue
Block a user