사용자 지정 클라이언트 인증이 필요한 WS를 호출해야합니다. 이 인증은 클라이언트에서 실행되고 http://127.0.0.1:80에서 수신 대기하는 프로그램에 의해 수행됩니다. 그래서 나는이처럼 시작하는 ProxySelector의 추가HttpUrlConnection.plainConnect()에서 ProxySelector이 null 인 이유는 무엇입니까?
final ProxySelector ps = new ProxySelector() {
@Override
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
ioe.printStackTrace();
}
@Override
public List<Proxy> select(URI uri) {
final List<Proxy> proxy = new ArrayList<Proxy>();
final SocketAddress adr = new InetSocketAddress("127.0.0.1", 80);
final Proxy p = new Proxy(Proxy.Type.HTTP, adr);
proxy.add(p);
return proxy;
};
ProxySelector.setDefault(ps);
잘 작동하는이 사용하지만, 일부 리팩토링 (WS 통화와 관련이없는) 한 후, 대신 을 갖는 http://my.server.com URI 입력으로, 내가 가진 소켓 : //my.server.com 그리고 그것은 "알 수없는 프록시 유형 : HTTP"실패 ..., 소켓 방식과 매우 정상적인 보이는
예전의 차이를 응용 프로그램과 새로운 하나는 HttpUrlConnection.plainConnect() 동안의 동작이 동일하지 않았습니다. 사실 실제 버전에서는 오른쪽 URI (922 줄의 http://www.docjar.com/html/api/sun/net/www/protocol/http/HttpURLConnection.java.html), 을 사용하여 ProxySelector를 호출하고 새 버전은 959 줄로 이동하여 socket : // scheme으로 끝나는 새로운 기본 연결을 만들기 시작합니다.
ProxySelector sel =
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<ProxySelector>() {
public ProxySelector run() {
return ProxySelector.getDefault();
}
});
이 "SEL"으로 내의 ProxySelector를 반환하는 데 사용하지만 지금은 null을 반환 :
그래서 차이는 다음 줄에있다.누군가이 줄을 정확하게 의미하는 이유와 그 결과가 이전 응용 프로그램과 다른 이유를 설명 할 수 있습니까?