2013-01-31 21 views
25

Tôi đã sử dụng bảo mật mùa xuân với @PreAuthorize trên các phương pháp điều khiển của mình. Lý do của tôi là tôi muốn kiểm tra ủy quyền xảy ra dự đoán trong một lớp và càng sớm càng tốt trong yêu cầu. Tuy nhiên, tôi chỉ đọc tài liệu về bảo mật mùa xuân 3 và thấy rằng họ khuyên bạn nên áp dụng bảo mật mức phương thức trên lớp dịch vụ (nhưng họ không nói lý do tại sao).Chú thích cấp độ phương pháp bảo mật mùa xuân có nên được áp dụng ở lớp điều khiển hoặc lớp dịch vụ không?

Câu hỏi của tôi là: nên chú thích cấp phương pháp bảo mật mùa xuân được áp dụng ở lớp bộ điều khiển hoặc lớp dịch vụ? (Hoặc "cả hai", hoặc "nó phụ thuộc"?) Quan trọng hơn: tại sao?

Trả lời

13

"Nó phụ thuộc" :). Nếu ứng dụng của bạn có một lớp dịch vụ mà qua đó tất cả logic nghiệp vụ của bạn được áp dụng thì đó thường là một nơi sạch sẽ để áp dụng các ràng buộc bảo mật của bạn và chắc chắn rằng bạn không bỏ lỡ bất kỳ trường hợp góc nào.

Mã web thường phức tạp hơn, có nhiều mã hơn, nó thay đổi nhanh hơn và bạn có thể sẽ gọi cùng một phương thức dịch vụ từ nhiều nơi. Ai đó có thể thêm một bộ điều khiển mới và quên bảo mật nó. Hoặc bạn có thể có các loại khách hàng khác nhau gọi cùng một dịch vụ.

Nhưng tùy thuộc vào cách ứng dụng của bạn được cấu trúc và trường hợp sử dụng của bạn là gì. Bạn có thể có một lý lẽ tốt cho lý do tại sao bạn muốn bảo đảm một bộ điều khiển.

+0

Cảm ơn, bạn đã đề cập đến các đối số tốt để đặt bảo mật trên dịch vụ. Bạn sẽ xem xét những lý lẽ gì để đảm bảo một bộ điều khiển? Cũng cho ngữ cảnh, ứng dụng tôi có trong tâm trí về cơ bản có một phương thức dịch vụ cho mỗi điểm cuối của bộ điều khiển, vì dịch vụ của tôi định nghĩa các ranh giới giao dịch. Vì vậy, cùng một phương thức dịch vụ chỉ được gọi từ một nơi và không có khách hàng nào khác sử dụng dịch vụ. – Jay

+0

Một lý do khác mà tôi nghĩ đến khi đặt ủy quyền cho dịch vụ là câu hỏi về ai có thể truy cập dịch vụ nào có thể là quyết định kinh doanh và như vậy có thể được định vị với logic nghiệp vụ. – Jay

+1

Off đầu của tôi, tôi không có bất kỳ đối số tốt để đảm bảo một bộ điều khiển tùy thuộc vào một lớp dịch vụ. Điều đó không có nghĩa là chúng có thể không tồn tại trong các trường hợp cụ thể. Các yêu cầu của bạn có thể chỉ định các quy tắc dựa trên dữ liệu thường chỉ có sẵn trong tầng web, chẳng hạn như các tiêu đề yêu cầu. –

9

Suy nghĩ về sử dụng lại mã. Bạn sẽ sử dụng dịch vụ của bạn ở nơi khác? Không chỉ để cấp cấp web của bạn? Chúng tôi cũng sử dụng lại các dịch vụ của chúng tôi bằng các cầu nối jms để chúng tôi bảo vệ lớp dịch vụ của mình.

+1

đó là một điểm tốt để giữ trong xem xét, cảm ơn. Đối với trường hợp cụ thể này, dịch vụ chỉ được sử dụng để cấp nguồn cấp web. – Jay

0

Tôi nghĩ Dịch vụ là nơi tốt hơn để sử dụng nó.

despites some problems rằng @PreAuthorizecould present trên Controller và FAQ Xuân An recommends đặt loại chú thích trên dịch vụ, tôi hiểu rằng việc uỷ quyền cho một số hành động là hơn một quy tắc kinh doanh sau đó một trách nhiệm đối với cấp web.

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