자바로 서블릿을 작성했고 그 서블릿에 대한 요청이 HTTP 또는 HTTPS를 사용하여 실행되었는지 알고 싶습니다.서블릿에 대한 요청이 HTTP 또는 HTTPS를 사용하여 실행되었는지 어떻게 알 수 있습니까?
나는 request.getProtocol()
을 사용할 수 있다고 생각했지만 두 방법 모두에서 HTTP/1.1을 반환합니다.
아이디어가 있으십니까?
자바로 서블릿을 작성했고 그 서블릿에 대한 요청이 HTTP 또는 HTTPS를 사용하여 실행되었는지 알고 싶습니다.서블릿에 대한 요청이 HTTP 또는 HTTPS를 사용하여 실행되었는지 어떻게 알 수 있습니까?
나는 request.getProtocol()
을 사용할 수 있다고 생각했지만 두 방법 모두에서 HTTP/1.1을 반환합니다.
아이디어가 있으십니까?
HttpSerlvetRequest.isSecure()는 대답에 관계없이 작동합니다 생각합니다. ServletContainer는 다음과 같은 경우에 true를 리턴 할 책임이 있습니다.
컨테이너는 요청이 HTTPS에 수신 될 때,이 요청이 가능한 속성을 확인해야합니다 :
isSecure. 상속 된 메서드를 확인하십시오.
https 및 http는 다른 포트에서 실행됩니다. 따라서 요청에서 포트를 가져올 수 있으며 요청이 어느 포트에서 왔는지 알 수 있으므로 프로토콜을 알 수 있습니다. int port = request.getServerPort();
@Krishnan 포트 번호는 임의로 선택할 수 있습니다. HTTP에서 44 개를 실행할 수 있습니다. 3 및 HTTPS on 80 또는 이들의 임의의 조합. – hd1
포트 번호는 신뢰할 수 없습니다.
그러나이 방식에 따라 달라질 수 있습니다 :
사용 :이 https
경우 request.getScheme()가 확인합니다.
그렇다면 보안 연결입니다.
나는이 톰캣 버전isSecure는 최소한 [1.2] (http://download.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#isSecure%28%29)로 돌아가며 Tomcat 전용이 아닙니다. . –
어디에서 'X-SSL-Secure : true'를 얻었습니까? 계속 검색 중이므로이 헤더에 대한 추가 정보를 찾을 수 없습니다. – Zotov
내 환경에서는 작동하지 않습니다 : 프론트 프록시로 아파치 2.4.10; 그것은 자바에서 알 수없는 것이기 때문에, 요청은 아파치에게 http 나 https로 행해졌 다. 물론, 나는 http to Java로 그것을 얻었지만 프론트 프록시가 어떻게 액세스되었는지 알 필요가있다. - 사실 @Zotov도 언급했듯이 : X-SSL-Sercure 헤더에 대한 정보는 거의 없습니다.그래서 나는 이것이 널리 구현되지 않았다고 가정합니다. – badera
헤더 이름은별로 표준이 아니므로 다를 수 있습니다. 그러나 여기서는 프록시가 SSL에 대한 헤더를 추가 할 수 있고 서버가이를 읽을 수 있다는 개념입니다. Ex의 경우 Nginx는 X-SSL-Protocol을 추가합니다. 또한 맞춤 헤더로 대체 할 수 있습니다. –