2011-11-20 28 views

Trả lời

83

HttpSerlvetRequest.isSecure() là câu trả lời. ServletContainer chịu trách nhiệm trả lại đúng trong các trường hợp sau:

  • Nếu ServletContainer có thể tự chấp nhận yêu cầu trên https.
  • Nếu có LoadBalancer ở phía trước ServletContainer. Và, LoadBlancer đã nhận được yêu cầu trên https và đã gửi đi cùng với ServletContainer trên đồng bằng http. Trong trường hợp này, LoadBalancer gửi tiêu đề X-SSL-Secure: đúng vào ServletContainer, danh sách này cần được tôn trọng.

Các container cũng nên thực hiện yêu cầu này thuộc tính có sẵn khi yêu cầu được nhận vào https:

  • javax.servlet.http.sslsessionid
  • javax.servlet.request.key_size
  • javax.servlet.request.X509Certificate
+1

Bạn có thể chia sẻ nơi bạn nhận được 'X-SSL-Secure: true' bit không? Tôi tiếp tục tìm kiếm và tôi không thể tìm thêm thông tin về tiêu đề này. – Zotov

+0

Điều này không hoạt động trên môi trường của tôi: Apache 2.4.10 làm proxy phía trước; nó iseems là không thể biết trong java, wheter yêu cầu đã được thực hiện với http hoặc https để apache. Chắc chắn, tôi nhận được nó như là http để Java, nhưng tôi cần phải biết, làm thế nào các proxy phía trước đã được truy cập. - Thật vậy, như @ Zotov cũng đã đề cập: Hầu như không có thông tin về tiêu đề X-SSL-Sercure.Vì vậy, tôi cho rằng điều này không được triển khai rộng rãi ?! – badera

+0

Tên tiêu đề có thể khác nhau vì nó không phải là rất chuẩn. Tuy nhiên, khái niệm ở đây là các proxy có thể thêm tiêu đề về SSL và các máy chủ có thể đọc chúng. Đối với Ex, Nginx thêm X-SSL-Protocol. Nó cũng có thể được thay thế bằng tiêu đề tùy chỉnh. –

10

isSecure. Hãy chắc chắn kiểm tra các phương pháp kế thừa.

-3

https và http chạy trên các cổng khác nhau. Vì vậy, bạn có thể nhận được cổng từ yêu cầu và biết từ cổng yêu cầu đến và để bạn có thể biết giao thức. int port = request.getServerPort();

+4

@ Số cổng Krishnan là tùy ý ... Tôi có thể chạy HTTP trên 44 3 và HTTPS trên 80 hoặc bất kỳ kết hợp nào của chúng. – hd1

23

Bạn không thể tin cậy phụ thuộc vào số cổng.
Nhưng bạn có thể phụ thuộc vào chương trình này:

Sử dụng: request.getScheme() để xem nếu nó là https.

Nếu đúng thì đó là kết nối an toàn.

Tôi tin rằng điều này sẽ làm việc bất kể Tomcat phiên bản

+1

isSecure quay trở lại ít nhất [1.2] (http://download.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#isSecure%28%29), và không phải là Tomcat cụ thể . –

Các vấn đề liên quan