Fix SOCKS5 proxy authentication
SOCKS5 proxy authentication didn't work with the system properties java.net.socks.username and java.net.socks.password. Instead we now use the Authenticator class to provide a proxy authenticator.
This commit is contained in:
parent
c0e1490530
commit
ba4f7b6e1a
|
@ -1,6 +1,8 @@
|
||||||
package ctbrec.io;
|
package ctbrec.io;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.Authenticator;
|
||||||
|
import java.net.PasswordAuthentication;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
|
@ -38,18 +40,15 @@ public abstract class HttpClient {
|
||||||
System.setProperty("socksProxyVersion", "4");
|
System.setProperty("socksProxyVersion", "4");
|
||||||
System.setProperty("socksProxyHost", Config.getInstance().getSettings().proxyHost);
|
System.setProperty("socksProxyHost", Config.getInstance().getSettings().proxyHost);
|
||||||
System.setProperty("socksProxyPort", Config.getInstance().getSettings().proxyPort);
|
System.setProperty("socksProxyPort", Config.getInstance().getSettings().proxyPort);
|
||||||
if(Config.getInstance().getSettings().proxyUser != null && !Config.getInstance().getSettings().proxyUser.isEmpty()) {
|
|
||||||
System.setProperty("java.net.socks.username", Config.getInstance().getSettings().proxyUser);
|
|
||||||
System.setProperty("java.net.socks.password", Config.getInstance().getSettings().proxyPassword);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SOCKS5:
|
case SOCKS5:
|
||||||
System.setProperty("socksProxyVersion", "5");
|
System.setProperty("socksProxyVersion", "5");
|
||||||
System.setProperty("socksProxyHost", Config.getInstance().getSettings().proxyHost);
|
System.setProperty("socksProxyHost", Config.getInstance().getSettings().proxyHost);
|
||||||
System.setProperty("socksProxyPort", Config.getInstance().getSettings().proxyPort);
|
System.setProperty("socksProxyPort", Config.getInstance().getSettings().proxyPort);
|
||||||
if(Config.getInstance().getSettings().proxyUser != null && !Config.getInstance().getSettings().proxyUser.isEmpty()) {
|
if(Config.getInstance().getSettings().proxyUser != null && !Config.getInstance().getSettings().proxyUser.isEmpty()) {
|
||||||
System.setProperty("java.net.socks.username", Config.getInstance().getSettings().proxyUser);
|
String username = Config.getInstance().getSettings().proxyUser;
|
||||||
System.setProperty("java.net.socks.password", Config.getInstance().getSettings().proxyPassword);
|
String password = Config.getInstance().getSettings().proxyPassword;
|
||||||
|
Authenticator.setDefault(new ProxyAuth(username, password));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DIRECT:
|
case DIRECT:
|
||||||
|
@ -102,4 +101,17 @@ public abstract class HttpClient {
|
||||||
client.connectionPool().evictAll();
|
client.connectionPool().evictAll();
|
||||||
client.dispatcher().executorService().shutdown();
|
client.dispatcher().executorService().shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ProxyAuth extends Authenticator {
|
||||||
|
private PasswordAuthentication auth;
|
||||||
|
|
||||||
|
private ProxyAuth(String user, String password) {
|
||||||
|
auth = new PasswordAuthentication(user, password == null ? new char[]{} : password.toCharArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected PasswordAuthentication getPasswordAuthentication() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue