프록시 인증이 통합 된 Microsoft ISA Server 뒤에 애플릿이 있습니다. 프록시 서버는 인증 자격 증명이없는 연결에 대해 http 405 (NOT 407)를 반환합니다. 내 java.net.Authenticator
클래스가 호출되지 않습니다. 이 상황에서 어떻게 프록시 서버에 대한 연결을 인증 할 수 있습니까?
애플릿은 java1.6으로 서명되고 컴파일됩니다. URLConnection
클래스가 연결에 사용됩니다.인증이 필요하지만 반환하지 않는 프록시 뒤에 http 연결을 개방하는 경우
답변
이 문제를 해결하기위한 두 가지 접근법을 볼 수 있으며 둘 다 실제로 이상적이지 않습니다. 먼저 승인 정보가 포함 된 요청을 보내면 응답 코드가 405
이 아니란 사실을 확인한 것 같습니다. 대답은 '예, 당신은 헤더와 같은 요청에 Proxy-authorization
헤더 설정을 시도 할 수 있습니다 :
URL url = new URL("http://location");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Proxy-authorization", authorizationValue);
해당 헤더의 형식은 프록시 서버에서 요구하는 인증 방식에 따라 달라집니다, 그래서 당신은거야 특정 시나리오에 대한 조사를해야합니다.
두 번째 방법은 내부 JDK 클래스를 서브 클래스로 만들어 응답 코드를 스푸핑하여 일반 프록시 인증 경로를 강제 적용하는 것입니다. 이 의도하지 않은 결과를 가져올 수 있도록
public class HttpURLConnection extends sun.net.www.protocol.http.HttpURLConnection {
@Override
public int getResponseCode() throws IOException {
int code = super.getResponseCode();
if (code == HTTP_BAD_METHOD) {
code = HTTP_PROXY_AUTH;
responseCode = code;
}
return code;
}
}
는 물론, 이것은 실제 405
응답을 마스크합니다 : 첫째, 여기에 서브 클래스입니다. 의 URL 객체를 말하는 것은이 java.net.URLStreamHandlerFactory
의 서브 클래스를 필요로 사용 :
public class URLStreamHandlerFactory extends java.net.URLStreamHandlerFactory {
@Override
URLStreamHandler createURLStreamHandler(String protocol) {
if (!protocol.equals("http")) {
return null;
} else {
return new java.net.URLStreamHandler {
protected String proxy;
protected int proxyPort;
public Handler() {
proxy = null;
proxyPort = -1;
}
public Handler (String proxy, int port) {
this.proxy = proxy;
this.proxyPort = port;
}
@Override
protected java.net.URLConnection openConnection(URL u) throws IOException {
return openConnection(u, (Proxy)null);
}
@Override
protected java.net.URLConnection openConnection(URL u, Proxy p) throws IOException {
return new HttpURLConnection(u, p, this);
}
@Override
protected int getDefaultPort() {
return 80;
}
}
}
}
}
는 그런 다음 초기화 코드 어딘가에 URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory());
를 호출하여이 객체를 사용할 수 있습니다. this site 및 this site은 핵심 Java 클래스 작동 방식을 찾는 데 유용합니다. HTTPS를 지원해야하는 경우 해당 프로토콜에 대해 유사한 변경을 수행해야합니다.
이러한 솔루션 중 하나가 유용 할 수 있기를 바랍니다. 후자의 접근 방식이 애플릿의 보안 제약 조건 내에서 작동하는지 완전히 확신 할 수는 없습니다. 전자는 그래야한다. Apache HttpComponents과 같은 다른 HTTP 라이브러리로 사용하는 것이 더 쉬울 수도 있습니다.
헤더는 프록시 승인인가? 또는 프록시 인증 헤더?. 인증 프로토콜은 시간이 (ntlm 또는 kerberos) 시간이 다르기 때문에이 접근법은 매우 힘들 것 같아요? 접근법 2에서 : 응답 코드를 설정하는 것으로 충분하다고 생각합니까? 나는 또한 어떤 종류의 인증이 필요한지에 대한 헤더를 설정할 필요가 있다고 생각한다. – e13420xx
Aproach는 프록시 인증입니다. 계획이 바뀌면 극도로 어려울 것 같습니다. 따라서 '405'를 반환하지만 어떤 유형의 인증이 필요하지 않습니까? 이 경우 네, 필요한 모든'Proxy-Authenticate' 응답 헤더도 포함시켜야합니다. 프록시 서버가 잘못 구성 되었습니까? 이것은 심각하게 깨진 행동처럼 들립니다! 서버가 브라우저와 같이 올바르게 작동합니까? – laz
나는 왜 그런 식으로 구성했는지 알지 못한다. 해당 네트워크의 클라이언트는 주로 로컬로 탐색하는 웹에 대한 액세스가 매우 제한적입니다. 명백히 클라이언트 측에서 해결할 수있는 문제로 인해 변경 될 수는 없습니다. – e13420xx
- 1. http 프록시 뒤에 capistrano
- 2. Squid에 문제 - 프록시 인증이 필요합니다.
- 3. 어떻게 자바 프록시 터널링을 수행하는 방법 애플릿에 프록시 뒤에 지속적인 연결을 만드는 애플릿
- 4. 프록시 뒤에 Zend_Feed_Reader가 있습니다.
- 5. 프록시 뒤에 번들을 설정하십시오.
- 6. 인증이 제공되면 프록시가 HTTP 응답을 캐시합니까?
- 7. 인증이 필요한 콘텐츠의 REST http 상태 코드?
- 8. 프록시 (코코아) 뒤에 웹보기 사용
- 9. Tomcat6 Apache2.2 프록시 SSL 뒤에
- 10. Java로 인증 된 HTTP 프록시
- 11. Java에서 시스템 HTTP 프록시 구성을 얻는 방법
- 12. 프록시 뒤에 자바 소켓 프로그래밍
- 13. 프록시 서버 뒤에 랩톱 시뮬레이션
- 14. 암호가 틀린 경우 htaccess로 http 인증이 느려지는 이유는 무엇입니까?
- 15. 영구 프록시 연결을 해제하는 방법
- 16. HTTP 상태 407 : "HTTP 상태 407 : 프록시 인증이 필요한 오류"나는이 오류가 두 시간 동안 한
- 17. 프록시 뒤에 허드슨에 BaseUrl을 변경하는 방법?
- 18. 클라이언트가 연결을 끊었을 때 HTTP 프록시/FastCGI/SCGI가 연결을 닫지 않습니다 - 버그 또는 기능?
- 19. 모든 HTTP 연결을 닫습니다.
- 20. Apache에서 HTTP (S) 연결을 종료합니다.
- 21. WCF 클라이언트 + Windows 서비스 + ISA = (407) 프록시 인증이 필요합니다.
- 22. 웹 프록시 뒤에 API를 통해 TFS에 연결
- 23. 자바 HTTP 프록시
- 24. HTTP 프록시 서버
- 25. PHP에서 HTTP 프록시 사용
- 26. 디버깅 목적을위한 http 프록시
- 27. HTTP 프록시 서버
- 28. "프록시"HTTP 요청
- 29. 프록시 뒤에 장고의 CSRF 보호를 비활성화하는 방법
- 30. HTTP 하위 인증이 다른 하위 도메인으로 전달되었습니다.
HttpURLConnection에 직접 액세스 할 수 있습니까? 아니면 다른 라이브러리를 통해서입니까? – laz
@ laz : 예. 접근 할 수 있습니다. 접근 방식 1의 – e13420xx