Я пытаюсь открыть следующий сайт: ссылка на URL-адрес Discord OAuth2 (наведите курсор на меня, чтобы увидеть ссылку) для загрузки с помощью JavaFX WebView в JDK12. Когда я пытаюсь загрузить этот сайт, отображается только белая страница. Следующий код используется для отображения и обработки WebView. Я использую библиотеку OAuth2Discord для обработки кода и авторизации.
DiscordAuth.java:
DiscordAuth ()
Этот метод инициализирует OAuthBuilder, используемый в остальной части кода ниже.
public DiscordAuth() {
CLIENT_SECRET = [REDACTED];
CLIENT_ID = [REDACTED];
REDIRECT_URL = "https://temperlesergal.github.io/NuBot/discordWebPage/success.html";
builder = new OAuthBuilder(CLIENT_ID, CLIENT_SECRET)
.setScopes(new String[]{"connections", "guilds", "email"})
.setRedirectURI(REDIRECT_URL);
}
getUser (WebView, WebView, поток)
Это предназначено для запуска процесса получения кода, примененного к URL-адресу при перенаправлении с URL-адреса Auth.
public void getUser(WebView webView, Thread thread) {
startOAuth2Flow(webView, thread);
}
startOAuth2Flow (WebView, WebView, поток)
Этот метод обрабатывает перенаправление сайта, а также разбивает URL-адрес для получения кода.
P.S. https://temperlesergal.github.io/NuBot/discordWebPage/index.html перенаправляет на URL-адрес аутентификации, указанный выше
private void startOAuth2Flow(WebView webView, Thread thread) {
String authURL = builder.getAuthorizationUrl(null);
WebEngine webEngine = webView.getEngine();
webEngine.setJavaScriptEnabled(true);
webEngine.setUserAgent("Cotton Le Sergal's OAuth2 grant for app.");
webEngine.getLoadWorker().stateProperty().addListener(
(ov, oldState, newState) -> {
if (webEngine.getLoadWorker().getException() != null || newState == Worker.State.FAILED){
System.err.println(webEngine.getLoadWorker().getException().toString());
}else{
System.out.println(webEngine.getLoadWorker().getState());
}
});
webEngine.locationProperty().addListener((observableValue, oldLocation, newLocation) -> {
System.out.println("newLocation = " + newLocation);
if (newLocation.startsWith(REDIRECT_URL) && newLocation.contains("code")) {
try {
URL url = new URL(newLocation);
String[] params = url.getQuery().split("&");
Map<String, String> map = new HashMap<>();
for (String param : params) {
String name = param.split("=")[0];
String value = param.split("=")[1];
map.put(name, value);
}
code = map.get("code");
gotTheAccessCode(code, thread);
System.out.println("Notifying thread");
synchronized (thread){
thread.notify();
thread.start();
System.out.println("Thread Notified!");
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
});
String url = "https://temperlesergal.github.io/NuBot/discordWebPage/index.html";
webEngine.load(url);
}
gotTheAccessCode (строковый код, поток потока)
Этот метод обменивает код и инициализирует следующее:
-builder.getUser ();
-builder.getGuilds ();
-builder.getConnections ()
private void gotTheAccessCode(String code, Thread thread) {
System.out.println("access code: " + code);
Response response = builder.exchange(code);
if (response == Response.ERROR) {
// AN ERROR HAPPENED WHILE EXCHANGING THE CODE
} else {
// EVERYTHING WORKED AS EXPECTED
}
System.out.println("Testing by printing guild info!");
getGuildInfo().forEach(guild -> System.out.println(guild.getName()));
System.out.println("DONE!");
user = builder.getUser();
guilds = builder.getGuilds();
connections = builder.getConnections();
}
FXMLController.java:
signIn ()
Этот метод запускается, когда пользователь нажимает кнопку входа в систему на сцене FXML. Он предназначен для того, чтобы позволить им входить в систему Discord через приложение JavaFX.
@FXML
void signIn(){
Thread thread = new Thread(() -> {
System.out.println("Thread waking up!");
Platform.runLater(() -> {
usernameLabel.setText(discordAuth.getUserNameWithDiscriminator());
setUserAvatar(discordAuth.getUserAvatarURL());
});
});
try {
if(thread.isAlive())
thread.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
discordSigninWebView.setVisible(true);
discordSigninWebView.setOpacity(0.0);
FadeIn signInFade = new FadeIn(discordSigninWebView);
signInFade.play();
discordAuth.getUser(discordSigninWebView, thread);
}
Вот что я вижу при загрузке в приложение:
Бот:
URL: URL-адрес не загружен в WebEngine
Описание: это значение по умолчанию посмотрите при запуске приложения. URL: https://discordapp.com/oauth2/authorize?client_id=569662931990478857&redirect_uri=https%3A%2F%2Ftemperlesergal.github.io%2FNuBot%2FdiscordWebPage%2FNuBot%2FdiscordWebPage%2Fsuccess.http: //support.http: //support.http: //support.html / a>
Описание: Это белый экран, который отображается после нажатия: «Авторизовать».
Вот что я вижу при загрузке в Chrome:
Интернет:
URL: https://discordapp.com/oauth2/authorize?client_id=569662931990478857&redirect_uri=https%3A%2F%2Ftemperlesergal.github.io%2FNuBot%2FdiscordWebPage%2Fsuccess.html&response_type=code&scope=identify%20email%20connections%20guilds
Описание. Это то, что должен отображать бот.
Это информация, выводимая на консоль.
Image size is: 800.0x800.0 with the width being the largest at: 800.0px.
Image is 8.0 times the size it should be... resizing
Image has been resized to the following: 100.0x100.0px.
Actual image size is: 100.0x100.0px.
Test
0 [OkHttp https://discordapp.com/...] DEBUG net.dv8tion.jda.internal.requests.Requester - Received response with following cf-rays: [5176ddc69aaae202-ORD]
317 [OkHttp https://discordapp.com/...] DEBUG net.dv8tion.jda.internal.requests.Requester - Received response with following cf-rays: [5176ddc83f13e202-ORD]
320 [Thread-3] INFO net.dv8tion.jda.api.JDA - Login Successful!
[0 / 3]
578 [OkHttp https://discordapp.com/...] DEBUG net.dv8tion.jda.internal.requests.Requester - Received response with following cf-rays: [5176ddca3e3ac510-ORD]
Host Name: [REDACTED]
Host Address: [REDACTED]
693 [JDA [0 / 3] MainWS-ReadThread] INFO net.dv8tion.jda.internal.requests.WebSocketClient - Connected to WebSocket
693 [JDA [0 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Sending Identify-packet...
734 [JDA [0 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Got HELLO packet (OP 10). Initializing keep-alive.
754 [OkHttp https://discordapp.com/...] DEBUG net.dv8tion.jda.internal.requests.Requester - Received response with following cf-rays: [5176ddcaaf3dc510-ORD]
754 [Thread-3] INFO net.dv8tion.jda.api.JDA - Login Successful!
[1 / 3]
832 [JDA [0 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.handle.GuildSetupController - Setting incomplete count to 0
832 [JDA [0 / 3] MainWS-ReadThread] INFO net.dv8tion.jda.api.JDA - Finished Loading!
Shard: 1 out of: 3 is ready.
842 [JDA [0 / 3] Gateway-Worker 1] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Sending normal message {"op":3,"d":{"game":{"name":"Type owo.help","type":0},"afk":false,"status":"online","since":1568679123052}}
883 [OkHttp https://discordapp.com/...] DEBUG net.dv8tion.jda.internal.requests.Requester - Received response with following cf-rays: [5176ddcc2a44c56c-ORD]
998 [OkHttp https://discordapp.com/...] DEBUG net.dv8tion.jda.internal.requests.Requester - Received response with following cf-rays: [5176ddccab8dc56c-ORD]
998 [Thread-3] INFO net.dv8tion.jda.api.JDA - Login Successful!
[2 / 3]
5952 [JDA [1 / 3] MainWS-ReadThread] INFO net.dv8tion.jda.internal.requests.WebSocketClient - Connected to WebSocket
5953 [JDA [1 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Sending Identify-packet...
5955 [JDA [1 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Got HELLO packet (OP 10). Initializing keep-alive.
6047 [JDA [1 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.handle.GuildSetupController - Setting incomplete count to 1
6082 [JDA [1 / 3] MainWS-ReadThread] INFO net.dv8tion.jda.api.JDA - Finished Loading!
Shard: 2 out of: 3 is ready.
6084 [JDA [1 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.handle.GuildSetupController - Finished setup for guild 530802775530012672 firing cached events 0
6246 [JDA [1 / 3] Gateway-Worker 1] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Sending normal message {"op":3,"d":{"game":{"name":"Type owo.help","type":0},"afk":false,"status":"online","since":1568679128295}}
11239 [JDA [2 / 3] MainWS-WriteThread] INFO net.dv8tion.jda.internal.requests.WebSocketClient - Connected to WebSocket
11240 [JDA [2 / 3] MainWS-WriteThread] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Sending Identify-packet...
11241 [JDA [2 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Got HELLO packet (OP 10). Initializing keep-alive.
11368 [JDA [2 / 3] MainWS-ReadThread] DEBUG net.dv8tion.jda.internal.handle.GuildSetupController - Setting incomplete count to 0
11368 [JDA [2 / 3] MainWS-ReadThread] INFO net.dv8tion.jda.api.JDA - Finished Loading!
Shard: 3 out of: 3 is ready.
11504 [JDA [2 / 3] Gateway-Worker 1] DEBUG net.dv8tion.jda.internal.requests.WebSocketClient - Sending normal message {"op":3,"d":{"game":{"name":"Type owo.help","type":0},"afk":false,"status":"online","since":1568679133581}}
newLocation = https://temperlesergal.github.io/NuBot/discordWebPage/index.html
SCHEDULED
RUNNING
SUCCEEDED
newLocation = https://discordapp.com/api/oauth2/authorize?client_id=569662931990478857&redirect_uri=https%3A%2F%2Ftemperlesergal.github.io%2FNuBot%2FdiscordWebPage%2Fsuccess.html&response_type=code&scope=identify%20email%20connections%20guilds
SCHEDULED
RUNNING
newLocation = https://discordapp.com/oauth2/authorize?client_id=569662931990478857&redirect_uri=https%3A%2F%2Ftemperlesergal.github.io%2FNuBot%2FdiscordWebPage%2Fsuccess.html&response_type=code&scope=identify%20email%20connections%20guilds
SUCCEEDED
Воспроизводимость: 100%
Простая попытка загрузить URL-адрес Auth в WebView вызовет эту проблему.
Мы будем очень признательны за любые мысли по этому поводу, спасибо.