Xử lý bảo mật, lỗi, cảnh báo và ghi nhật ký

Phần này bao gồm các chủ đề sau:

Bảo mật

Nguồn dữ liệu có thể hoạt động ở một trong hai chế độ truy cập như sau:

  • Ở chế độ truy cập bị hạn chế (tức là chế độ mặc định), nguồn dữ liệu chỉ phân phát những yêu cầu bắt nguồn từ cùng một miền với nơi đặt nguồn dữ liệu. Chế độ hạn chế ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web (XSRF) và vì vậy, chế độ này an toàn hơn so với chế độ truy cập không hạn chế. Vì thư viện nguồn dữ liệu cung cấp một giao diện chỉ để trả về dữ liệu, chứ không phải để thay đổi trạng thái hoặc dữ liệu phía máy chủ, nên chỉ có các cuộc tấn công XSRF nhằm tìm cách lấy cắp dữ liệu mới có khả năng xảy ra. Để đảm bảo nguồn dữ liệu của bạn chống lại các thủ đoạn đánh cắp dữ liệu, bạn phải sử dụng chế độ hạn chế kết hợp với phương thức xác thực dựa trên cookie. Cách xác thực người dùng phụ thuộc vào môi trường và cách triển khai của bạn.

  • Ở chế độ truy cập không hạn chế, một nguồn dữ liệu phân phát tất cả yêu cầu bất kể nguồn gốc. Nguồn dữ liệu chạy ở chế độ không bị hạn chế có thể được bảo vệ bằng phương thức xác thực dựa trên cookie. Tuy nhiên, xin lưu ý rằng nguồn dữ liệu đó sẽ dễ bị tấn công XSRF. Hãy sử dụng chế độ không hạn chế nếu hình ảnh trực quan trên các trang web bên ngoài miền của nguồn dữ liệu cần truy cập vào nguồn dữ liệu, hoặc nếu dữ liệu nằm trong miền công cộng nên không cần được bảo vệ.

Yêu cầu trực quan hoá có thể chỉ định định dạng phản hồi là JSON, CSV hoặc HTML. Định dạng phản hồi xác định định dạng mà nguồn dữ liệu trả về bảng dữ liệu. Vì các định dạng CSV và HTML không dễ bị tấn công XSRF, nên người dùng có thể truy cập vào các định dạng này từ các miền khác, ngay cả ở chế độ hạn chế.

Để chỉ định chế độ không hạn chế, hãy ghi đè isRestrictedAccessMode() như sau:

  @Override
  protected boolean isRestrictedAccessMode() {
    return false;
  }

Để cho đơn giản, tất cả các ví dụ được cung cấp trong thư viện đều chạy ở chế độ truy cập không hạn chế.

Lỗi và cảnh báo

Khi không thể hoặc không thể trả về một bảng dữ liệu hợp lệ, thư viện sẽ gửi một DataSourceException. Ví dụ: nếu không thể xác thực người dùng. Thư viện sẽ gửi các ngoại lệ này khi lỗi ngăn không cho thư viện tạo bảng dữ liệu. Bạn nên gửi ngoại lệ trong các trường hợp dành riêng cho nguồn dữ liệu của bạn. Nếu có, hãy tạo các loại ngoại lệ lỗi của riêng bạn bằng cách kế thừa từ lớp DataSourceException. Bạn cũng có thể trực tiếp gửi lớp DataSourceException.

Lớp DataSourceException nằm trong gói base, lớp này nhận các tham số sau:

  • ReasonType 
    Thông số này là bắt buộc. Các loại lý do có thể sử dụng được xác định trong enum ReasonType. Nếu không có loại lý do nào hiện có phù hợp, bạn có thể sử dụng Other hoặc Internal.
     
  • MessageToUser 
    Thông số này xác định văn bản của thông báo lỗi. Trong hầu hết trường hợp, thông tin này sẽ hiển thị cho người dùng dưới dạng chú giải công cụ. Vì vậy, bạn không nên thêm thông tin kỹ thuật hoặc thông tin mật.

Bạn có thể sử dụng tập hợp các hàm trợ giúp trong datasource.DataSourceHelper để xử lý lỗi. Trong trường hợp này, hãy gọi 2 hàm có cùng tên là setErrorServletResponse để lấy DataSourceException và đặt lỗi trong phản hồi của servlet dữ liệu. Một trong các hàm này nhận yêu cầu nguồn dữ liệu, hàm còn lại lấy HttpServlet request và dùng trong trường hợp không tạo được DataSourceRequest. Bạn có thể xem ví dụ về cách triển khai trong phần Xác định khả năng và luồng sự kiện.

Nếu không thể trả về một bảng dữ liệu, thư viện sẽ trả về một lỗi. Nếu có thể trả về một bảng dữ liệu, nhưng có sự cố cần báo cáo, thì thư viện sẽ trả về một cảnh báo cùng với bảng dữ liệu. Ví dụ: thư viện sẽ tạo cảnh báo trong các trường hợp sau:

  • nếu hình ảnh truy vấn cung cấp LIMIT dẫn đến dữ liệu bị cắt bớt.
  • nếu hình ảnh truy vấn yêu cầu mẫu định dạng không hợp lệ trong mệnh đề FORMAT.

Để thêm cảnh báo của riêng bạn, hãy tạo một bản sao của base.Warning và thêm bản sao đó vào bảng dữ liệu bằng phương thức addWarning().

Ghi nhật ký

Thư viện này sử dụng tính năng ghi nhật ký Jakarta commons. Bạn có thể dùng tính năng ghi nhật ký chung ở Jakarta với hầu hết các hệ thống ghi nhật ký phổ biến mà có thể bạn đã có sẵn. Bạn có thể cần phải viết một trình chuyển đổi nếu hệ thống ghi nhật ký của bạn không chuẩn. Để biết thêm thông tin, hãy xem trang chủ ghi nhật ký chung của Jakarta.

Khi một ngoại lệ được gửi, thông tin sẽ được gửi đến nhật ký. Cách bạn truy cập vào nhật ký phụ thuộc vào hệ thống ghi nhật ký mà bạn sử dụng.