Какое веб-приложение на основе Java описано здесь? У меня есть веб-приложение на основе Spring MVC, в котором возникают те же проблемы, что и здесь.
Я попробовал 2 способа настроить прокси-сервер SOCKS в своем приложении:
- Использование аргументов JVM командной строки.
- Используя упомянутый здесь код Java, завернутый в Bean-компонент, который я загружаю в свой корневой контекст приложения.
Мой класс Java загружается как bean-компонент:
package be.example.backend.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.Authenticator;
import java.net.MalformedURLException;
import java.net.PasswordAuthentication;
import java.net.URL;
public class ProximoSocksConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(ProximoSocksConfig.class);
private static final String PROXIMO_ENV_VAR = "PROXIMO_URL";
private static final String PROXIMO_PORT = "1080";
public ProximoSocksConfig() throws MalformedURLException {
setup();
}
/**
* Setup Proximo proxying
*
* @return True if Proximo was configured, false if the Proximo environment variable was not found
*/
public static boolean setup() throws MalformedURLException {
String proximoUrl = System.getenv(PROXIMO_ENV_VAR);
if (proximoUrl != null) {
URL proximo = new URL(proximoUrl);
String userInfo = proximo.getUserInfo();
String user = userInfo.substring(0, userInfo.indexOf(':'));
String password = userInfo.substring(userInfo.indexOf(':') + 1);
String host = proximo.getHost();
System.setProperty("socksProxyHost", host);
System.setProperty("socksProxyPort", PROXIMO_PORT);
Authenticator.setDefault(new ProxyAuth(user, password));
LOGGER.info("{} specified; using <{}:{}> {}:{} as SOCKS proxy", PROXIMO_ENV_VAR, user, password, host,
PROXIMO_PORT);
return true;
}
LOGGER.info("{} environment variable not set", PROXIMO_ENV_VAR);
return false;
}
private static class ProxyAuth extends Authenticator {
private final PasswordAuthentication passwordAuthentication;
private ProxyAuth(String user, String password) {
passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return passwordAuthentication;
}
}
}
Мой корневой контекст приложения на основе XML:
<!-- Proximo SOCKS proxy configuration -->
<bean id="proximoSocksConfig" class="be.example.backend.configuration.ProximoSocksConfig"/>
Я больше не получаю ошибку привязки, потому что бинарная оболочка proximo больше не используется, но мое приложение недоступно по общедоступному IP-адресу, предоставленному Proximo (я использую пакет Proximo Starters).
person
Boeboe
schedule
17.12.2014