2011-08-17 24 views
21

Tôi hiện đang sử dụng Play! 1.2.2 và khung công tác Netty mới của nó.Thực thi SSL trên Play! Khung

Tôi chưa tìm thấy phương pháp đơn giản để thực thi SSL, mặc dù có thể nhận HTTP và HTTPS để phân phát không đồng bộ. Có ai đó đã làm việc với Play! có phương pháp thực thi SSL đơn giản? Không chắc chắn nếu tôi cần tạo chuyển hướng hoặc nếu điều này có thể được giải quyết nhanh chóng trong tệp conf.

Trả lời

22

Có một số cách để thực thi SSL.

Thứ nhất, bạn có thể đặt tất cả các hành động của bạn để sử dụng phương pháp .secure(), ví dụ

<a href="@{Application.index.secure()}">index page</a> 

Ngoài ra, và có lẽ là cách tốt nhất, là để thực hiện điều này thông qua một máy chủ frontend HTTP, ví dụ như Apache, Nginx hoặc Lighttpd.

Ý tưởng về máy chủ http giao diện người dùng, là ứng dụng của bạn chạy trên cổng 9000, nhưng không thể truy cập từ mạng bên ngoài. HTTP chịu trách nhiệm cho tất cả các yêu cầu gửi đến và được định cấu hình để chỉ chấp nhận HTTPS. HTTPS được xử lý bởi máy chủ HTTP và yêu cầu sau đó được chuyển tiếp tới Play.

Điều này khiến toàn bộ ứng dụng Play của bạn hoạt động như bình thường và SSL được tải xuống ứng dụng khác. Phương pháp tương tự này có thể được áp dụng cho cân bằng tải, chứ không phải máy chủ HTTP, nhưng tôi đoán phần lớn mọi người sẽ đi với phương án thay thế rẻ hơn nhiều so với máy chủ HTTP, trừ khi chạy trong môi trường công ty.

+0

Rất hữu ích và Tôi đánh giá cao việc xem xét nhiều phương pháp. – crockpotveggies

12

Trong bộ điều khiển, bạn có thể kiểm tra đối với request.secure và thực hiện chuyển hướng hoặc trả lại 403/truy cập bị từ chối.

Bạn có thể buộc SSL cho toàn bộ điều khiển thực hiện điều này:

public static class ForceSSL extends Controller 
{ 
    @Before 
    static void verifySSL() 
    { 
     if (request.secure == false) 
      redirect("https://" + request.host + request.url); 
    } 
} 

... và chú thích một bộ điều khiển:

@With(ForceSSL.class) 
public class Foo extends Controller 
{ 
.... 
} 

Xem thêmhttp://groups.google.com/group/play-framework/browse_thread/thread/7b9aa36be85d0f7b

+1

Nếu sử dụng heroku, mã này sẽ gây ra "Quá nhiều chuyển hướng". Sử dụng mã tương tự từ đây: http://stackoverflow.com/questions/7415030/enforce-https-routing-for-login-with-play-framework – seePatCode

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