การจัดการความปลอดภัย ข้อผิดพลาด คำเตือน และการบันทึก

ส่วนนี้จะครอบคลุมถึงหัวข้อต่อไปนี้:

ความปลอดภัย

แหล่งข้อมูลทำงานได้ในโหมดการเข้าถึง 1 ใน 2 โหมดดังต่อไปนี้

  • ในโหมดการเข้าถึงที่จำกัดซึ่งเป็นค่าเริ่มต้น แหล่งข้อมูลจะแสดงเฉพาะคำขอที่มาจากโดเมนเดียวกันกับแหล่งที่มาของข้อมูล โหมดที่จำกัดจะป้องกันการโจมตีด้วยการปลอมแปลงคำขอข้ามเว็บไซต์ (XSRF) จึงมีความปลอดภัยมากกว่าโหมดการเข้าถึงแบบไม่จำกัด เนื่องจากไลบรารีแหล่งข้อมูลมีอินเทอร์เฟซสำหรับการส่งคืนข้อมูลเท่านั้น และไม่ได้มีไว้สำหรับเปลี่ยนสถานะหรือข้อมูลฝั่งเซิร์ฟเวอร์ จึงเป็นไปได้เฉพาะการโจมตี XSRF ที่พยายามขโมยข้อมูล คุณต้องใช้โหมดที่จำกัดร่วมกับการตรวจสอบสิทธิ์ที่ใช้คุกกี้เพื่อให้แหล่งข้อมูลปลอดภัยจากการพยายามขโมยข้อมูล วิธีตรวจสอบสิทธิ์ผู้ใช้จะขึ้นอยู่กับสภาพแวดล้อมและการติดตั้งใช้งาน

  • ในโหมดการเข้าถึงที่ไม่จำกัด แหล่งข้อมูลจะให้บริการคำขอทั้งหมด ไม่ว่าจะมาจากแหล่งใด แหล่งข้อมูลที่ทำงานในโหมดที่ไม่จำกัดจะได้รับการปกป้องด้วยการตรวจสอบสิทธิ์ที่ใช้คุกกี้ แต่โปรดทราบว่าแหล่งข้อมูลจะมีช่องโหว่ในการโจมตี XSRF ใช้โหมดที่ไม่จำกัดหากการแสดงภาพบนหน้าเว็บนอกโดเมนของแหล่งข้อมูลจำเป็นต้องเข้าถึงแหล่งข้อมูล หรือหากข้อมูลอยู่ในโดเมนสาธารณะ จึงไม่จำเป็นต้องได้รับการปกป้อง

คำขอการแสดงภาพสามารถระบุรูปแบบการตอบสนอง ของ JSON, CSV หรือ HTML ได้ รูปแบบการตอบกลับจะกำหนดรูปแบบที่แหล่งข้อมูลแสดงตารางข้อมูล เนื่องจากรูปแบบ CSV และ HTML ไม่มีช่องโหว่ต่อการโจมตี XSRF ไฟล์เหล่านี้จะสามารถเข้าถึงได้จากโดเมนอื่น แม้ว่าจะอยู่ในโหมดจำกัดก็ตาม

หากต้องการระบุโหมดที่ไม่จำกัด ให้ลบล้าง isRestrictedAccessMode() ดังนี้

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

ตัวอย่างทั้งหมดที่มาพร้อมกับไลบรารีจะทำงานในโหมดการเข้าถึงที่ไม่จำกัดเพื่อความง่าย

ข้อผิดพลาดและคำเตือน

เมื่อไม่สามารถทำได้หรือต้องการส่งคืนตารางข้อมูลที่ถูกต้องไลบรารีจะส่ง DataSourceException เช่น ในกรณีที่ตรวจสอบสิทธิ์ผู้ใช้ไม่ได้ ไลบรารีจะให้ข้อยกเว้นเหล่านี้ เมื่อข้อผิดพลาดป้องกันไม่ให้สร้างตารางข้อมูล คุณอาจต้องระบุข้อยกเว้นในสถานการณ์เฉพาะตัวสำหรับแหล่งข้อมูลของคุณ หากเป็นเช่นนั้น ให้สร้างประเภทข้อยกเว้นข้อผิดพลาดของคุณเองโดยรับค่าจากคลาส DataSourceException คุณยังสามารถย้ายชั้นเรียน DataSourceException โดยตรงได้ด้วย

คลาส DataSourceException อยู่ในแพ็กเกจ base โดยใช้พารามิเตอร์ต่อไปนี้

  • ReasonType 
    ต้องระบุพารามิเตอร์นี้ ประเภทเหตุผลที่ใช้ได้จะกำหนดไว้ใน enum ReasonType หากไม่มีประเภทเหตุผลที่เหมาะสม คุณสามารถใช้ Other หรือ Internal ได้
     
  • MessageToUser 
    พารามิเตอร์นี้จะกำหนดข้อความแสดงข้อผิดพลาด ในกรณีส่วนใหญ่ ข้อมูลนี้จะแสดงแก่ผู้ใช้เป็นเคล็ดลับเครื่องมือ จึงไม่ควรใส่ข้อมูลทางเทคนิคหรือข้อมูลลับ

คุณใช้ชุดฟังก์ชันตัวช่วยใน datasource.DataSourceHelper เพื่อจัดการข้อผิดพลาดได้ ในกรณีนี้ ให้เรียกใช้ฟังก์ชัน 2 รายการซึ่งมีชื่อเดียวกันคือ setErrorServletResponse เพื่อใช้ DataSourceException และตั้งค่าข้อผิดพลาดในการตอบกลับของเซิร์ฟเล็ตข้อมูล ฟังก์ชันหนึ่งเหล่านี้ต้องใช้คำขอแหล่งข้อมูล ส่วนอีกฟังก์ชันหนึ่งจะใช้ HttpServlet request และจะใช้ในกรณีที่สร้าง DataSourceRequest ไม่สำเร็จ ตัวอย่างการใช้งานจะอยู่ในการกำหนดความสามารถและโฟลว์ของเหตุการณ์

หากแสดงผลตารางข้อมูลไม่ได้ ไลบรารีจะแสดงข้อผิดพลาด หากส่งคืนตารางข้อมูลได้ แต่มีปัญหาในการรายงาน ไลบรารีจะแสดงคำเตือนพร้อมกับตารางข้อมูล ตัวอย่างเช่น ไลบรารีจะสร้างคำเตือนในสถานการณ์ต่อไปนี้

  • หากการแสดงภาพของคำค้นหาให้ LIMIT ซึ่งส่งผลให้เกิดข้อมูลที่ถูกตัด
  • หากการแสดงภาพในการค้นหาขอรูปแบบการจัดรูปแบบที่ไม่ถูกต้องในอนุประโยค FORMAT

หากต้องการเพิ่มคำเตือนของคุณเอง ให้สร้างอินสแตนซ์ของ base.Warning และเพิ่มลงในตารางข้อมูลโดยใช้เมธอด addWarning()

การบันทึก

ห้องสมุดนี้ใช้การบันทึกคอมมอนส์จาการ์ตา การบันทึกของ Jakarta Commons นั้นใช้ได้กับระบบการบันทึกทั่วไปที่คุณน่าจะมีอยู่แล้ว คุณอาจต้องเขียนอะแดปเตอร์หากระบบการบันทึกของคุณไม่เป็นไปตามมาตรฐาน สำหรับรายละเอียดเพิ่มเติม โปรดดูที่หน้าแรก การบันทึกของจาร์กาตา

เมื่อมีการส่งข้อมูลข้อยกเว้นไปยังบันทึก วิธีเข้าถึงบันทึกจะขึ้นอยู่กับระบบการบันทึกที่ใช้