fix(CasdoorLoginWindow,resources): 修复了内嵌浏览器创建失败无法登录问题,完善登录逻辑的错误处理,添加无内嵌浏览器时使用默认浏览器登录的逻辑,补提交上次缺失的资源文件,为内嵌浏览器添加返回登录界面功能
This commit is contained in:
@@ -44,6 +44,7 @@ import java.awt.event.WindowEvent;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.instrument.Instrumentation;
|
import java.lang.instrument.Instrumentation;
|
||||||
import java.lang.management.*;
|
import java.lang.management.*;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -83,7 +84,7 @@ public class AxisInnovatorsBox {
|
|||||||
private final boolean isDebug;
|
private final boolean isDebug;
|
||||||
private static DebugWindow debugWindow;
|
private static DebugWindow debugWindow;
|
||||||
|
|
||||||
private LoginData loginData;
|
private static LoginData loginData;
|
||||||
|
|
||||||
public AxisInnovatorsBox(String[] args, boolean isDebug) {
|
public AxisInnovatorsBox(String[] args, boolean isDebug) {
|
||||||
this.args = args;
|
this.args = args;
|
||||||
@@ -92,9 +93,12 @@ public class AxisInnovatorsBox {
|
|||||||
organizingCrashReports(throwable instanceof Exception ?
|
organizingCrashReports(throwable instanceof Exception ?
|
||||||
(Exception) throwable : new Exception(throwable));
|
(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 {
|
try {
|
||||||
StateManager stateManager = new StateManager();
|
StateManager stateManager = new StateManager();
|
||||||
String token = stateManager.getState("loginToken");
|
String token = stateManager.getState("loginToken");
|
||||||
@@ -107,22 +111,29 @@ public class AxisInnovatorsBox {
|
|||||||
} else if (loginResult.success()) {
|
} else if (loginResult.success()) {
|
||||||
loginData = loginResult.loginData();
|
loginData = loginResult.loginData();
|
||||||
stateManager.saveState("loginToken", loginResult.token());
|
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.showMessageDialog(null, "登录成功", "登录",
|
||||||
JOptionPane.INFORMATION_MESSAGE);
|
JOptionPane.INFORMATION_MESSAGE);
|
||||||
} else {
|
} else {
|
||||||
// 登录失败,弹出错误提醒,这里只是输出登录错误信息
|
// 登录失败,弹出错误提醒,这里只是输出登录错误信息
|
||||||
logger.error("Login error: " + loginResult.message());
|
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 {
|
} else {
|
||||||
CasdoorServer casdoorServer = new CasdoorServer();
|
CasdoorServer casdoorServer = new CasdoorServer();
|
||||||
User user = casdoorServer.parseJwtToken(token);
|
User user = casdoorServer.parseJwtToken(token);
|
||||||
loginData = new LoginData(token, user);
|
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) {
|
} 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);
|
main = new AxisInnovatorsBox(args,isDebug);
|
||||||
try {
|
try {
|
||||||
main.initLog4j2();
|
|
||||||
main.setTopic();
|
|
||||||
|
|
||||||
List<Map<String, String>> validFiles = ArgsParser.parseArgs(args);
|
List<Map<String, String>> validFiles = ArgsParser.parseArgs(args);
|
||||||
for (Map<String, String> fileInfo : validFiles) {
|
for (Map<String, String> fileInfo : validFiles) {
|
||||||
@@ -993,6 +1002,7 @@ public class AxisInnovatorsBox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
main.thread = new Thread(() -> {
|
main.thread = new Thread(() -> {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 主任务1:加载插件
|
// 主任务1:加载插件
|
||||||
logger.info("Loaded plugins Started");
|
logger.info("Loaded plugins Started");
|
||||||
|
|||||||
@@ -91,6 +91,37 @@ public class CasdoorLoginWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initUI() {
|
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 = new JDialog();
|
||||||
dialog.setTitle("AXIS 认证");
|
dialog.setTitle("AXIS 认证");
|
||||||
dialog.setSize(500, 750);
|
dialog.setSize(500, 750);
|
||||||
@@ -100,42 +131,40 @@ public class CasdoorLoginWindow {
|
|||||||
JPanel panel = new JPanel();
|
JPanel panel = new JPanel();
|
||||||
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
|
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
|
||||||
|
|
||||||
JPanel buttonPanel = new JPanel();
|
if (browser != null) {
|
||||||
buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
|
|
||||||
|
|
||||||
|
JPanel buttonPanel = new JPanel();
|
||||||
|
buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
|
||||||
|
|
||||||
JButton backButton = new JButton("");
|
JButton homeButton = new JButton("");
|
||||||
backButton.setIcon(LoadIcon.loadIcon("back.png", 24));
|
homeButton.setIcon(LoadIcon.loadIcon("material-symbols-home.png", 24));
|
||||||
backButton.addActionListener(e -> browser.goBack());
|
homeButton.addActionListener(e -> browser.loadURL(casdoorServer.getSigninUrl()));
|
||||||
backButton.setFocusPainted(false);
|
homeButton.setFocusPainted(false);
|
||||||
backButton.setBorderPainted(false);
|
homeButton.setBorderPainted(false);
|
||||||
JButton forwardButton = new JButton("");
|
JButton backButton = new JButton("");
|
||||||
forwardButton.setIcon(LoadIcon.loadIcon("forward.png", 24));
|
backButton.setIcon(LoadIcon.loadIcon("material-symbols-back.png", 24));
|
||||||
forwardButton.addActionListener(e -> browser.goForward());
|
backButton.addActionListener(e -> browser.goBack());
|
||||||
forwardButton.setFocusPainted(false);
|
backButton.setFocusPainted(false);
|
||||||
forwardButton.setBorderPainted(false);
|
backButton.setBorderPainted(false);
|
||||||
JButton refreshButton = new JButton("");
|
JButton forwardButton = new JButton("");
|
||||||
refreshButton.setIcon(LoadIcon.loadIcon("refresh.png", 24));
|
forwardButton.setIcon(LoadIcon.loadIcon("material-symbols-forward.png", 24));
|
||||||
refreshButton.addActionListener(e -> browser.reload());
|
forwardButton.addActionListener(e -> browser.goForward());
|
||||||
refreshButton.setFocusPainted(false);
|
forwardButton.setFocusPainted(false);
|
||||||
refreshButton.setBorderPainted(false);
|
forwardButton.setBorderPainted(false);
|
||||||
// 将按钮面板添加到主panel顶部
|
JButton refreshButton = new JButton("");
|
||||||
buttonPanel.add(backButton);
|
refreshButton.setIcon(LoadIcon.loadIcon("material-symbols-refresh.png", 24));
|
||||||
buttonPanel.add(forwardButton);
|
refreshButton.addActionListener(e -> browser.reload());
|
||||||
buttonPanel.add(refreshButton);
|
refreshButton.setFocusPainted(false);
|
||||||
panel.add(buttonPanel, 0);
|
refreshButton.setBorderPainted(false);
|
||||||
|
// 将按钮面板添加到主panel顶部
|
||||||
|
buttonPanel.add(homeButton);
|
||||||
|
buttonPanel.add(backButton);
|
||||||
|
buttonPanel.add(forwardButton);
|
||||||
|
buttonPanel.add(refreshButton);
|
||||||
|
panel.add(buttonPanel, 0);
|
||||||
|
|
||||||
if (browser == null) {
|
panel.add(browser.getUIComponent());
|
||||||
// 初始化浏览器
|
|
||||||
CefApp cefApp = CefAppManager.getInstance();
|
|
||||||
CefClient client = cefApp.createClient();
|
|
||||||
browser = client.createBrowser(
|
|
||||||
casdoorServer.getSigninUrl(),
|
|
||||||
false,
|
|
||||||
false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
panel.add(browser.getUIComponent());
|
|
||||||
dialog.add(panel);
|
dialog.add(panel);
|
||||||
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
|
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
|
||||||
@Override
|
@Override
|
||||||
@@ -152,7 +181,9 @@ public class CasdoorLoginWindow {
|
|||||||
if (server == null) {
|
if (server == null) {
|
||||||
startLocalCallbackServer();
|
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