2016-09-13 28 views
11

Chúng tôi đang sử dụng Play! khung cho các phiên HTTP.Làm thế nào để lấy các giá trị chung (IpAddress, TenantId) trong GenericDao?

tenantIdipAddress là các cột phổ biến trên nhiều bảng.

Khi người dùng đăng nhập, chúng tôi đang lưu trữ các tenantId trong HttpContextSession

Bất cứ khi nào chúng tôi yêu cầu địa chỉ IP của người dùng, chúng tôi đang sử dụng Http.Context.current().request().remoteAddress() để lưu trữ các địa chỉ IP.

Chúng tôi có rất nhiều truy vấn được viết và giờ chúng tôi muốn lưu hoặc truy vấn theo cách tổng quát cho tenantId.

Tất cả các truy vấn đi qua GenericDao

Chúng ta có thể sử dụng sau trong GenericDao để có được Id người thuê nhà để chúng ta có thể thêm vào tất cả các truy vấn?

Http.Context.session().get("tenantId"); 

cách tiếp cận tốt nhất để lưu hoặc truy xuất các chi tiết này là gì?

Cảm ơn.

+2

Đại diện '50' sẽ không đưa bạn câu trả lời cho câu trả lời ngoài chủ đề/quá rộng/ý kiến ​​mà rất có thể sẽ bị đóng và có thể bị xóa ngay sau khi tiền thưởng hết hạn. –

+1

Bạn không cung cấp phiên bản Play Framework, 1.x và 2.x khác biệt đáng kể. –

+1

Phiên bản 2.x là phiên bản hiện tại đang được sử dụng – Kathiresa

Trả lời

0

Bạn không muốn DAO của bạn phải phụ thuộc vào các lớp trình bày như một phiên HTTP. Tôi muốn giới thiệu một trừu tượng để ẩn các chi tiết này.

Tạo giao diện có tên TenantIdProvider và đưa nó vào DAO của bạn. Nó sẽ trông giống như sau:

public interface TenantIdProvider 
{ 
    String getTenantId(); 
} 

Sau đó tạo một triển khai được gọi là HttpSessionTenantIdProvider.

class HttpSessionTenantIdProvider implements TenantIdProvider 
{ 
    @Override 
    public String getTenantId() 
    { 
     return Http.Context.session().get("tenantId"); 
    } 
} 

Bây giờ GenericDAO của bạn có thể có một tham chiếu đến TenantIdProvider và mọi truy vấn mà cần sự tenantId có thể lấy nó qua TenantIdProvider và không có bất kỳ sự phụ thuộc vào khuôn khổ chơi hay bất kỳ lớp trình bày khác mà bạn sử dụng.

Điều này thực sự trở nên quan trọng nếu bạn kết thúc việc có lịch biểu chạy và gửi thông báo hoặc một số nhiệm vụ khác và họ sử dụng DAO này. Nếu DAO này phụ thuộc vào một phiên HTTP nó sẽ không thể. Ứng dụng công việc của bạn có thể tạo ra một TenantIdProvider mà chỉ trả về "hệ thống" hoặc một cái gì đó như thế.

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