טיפול באבטחה, בשגיאות, באזהרות וברישום ביומן

סעיף זה עוסק בנושאים הבאים:

אבטחה

מקור נתונים יכול לפעול באחד משני מצבי גישה הבאים:

  • במצב גישה מוגבלת, שהוא ברירת המחדל, מקור נתונים שולח רק בקשות שמקורן באותו דומיין שבו נמצא מקור הנתונים. מצב 'סינון תוכן' מונע התקפות זיוף בקשות בין אתרים (XSRF), ולכן הוא מאובטח יותר ממצב גישה בלתי מוגבלת. ספריית מקורות הנתונים מספקת ממשק להחזרת נתונים בלבד ולא לשינוי המצב או הנתונים בצד השרת, ולכן אפשריות רק התקפות XSRF שמנסות לגנוב נתונים. כדי לאבטח את מקור הנתונים מפני ניסיונות לגניבת נתונים, צריך להשתמש במצב מוגבל בשילוב עם אימות באמצעות קובצי cookie. האופן שבו אתם מאמתים משתמשים תלוי בסביבה ובהטמעה שלכם.

  • במצב גישה בלתי מוגבלת, מקור נתונים ממלא את כל הבקשות, ללא קשר למקור שלהן. מקור נתונים שפועל במצב בלתי מוגבל יכול להיות מוגן באמצעות אימות שמבוסס על קובצי cookie, אבל חשוב לזכור שמקור הנתונים יהיה חשוף להתקפות 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 כדי לטפל בשגיאות. במקרה הזה, מפעילים שתי פונקציות עם אותו השם setErrorServletResponse כדי לקבל DataSourceException ולהגדיר שגיאה בתגובה של שרת הנתונים. אחת מהפונקציות האלו מקבלת בקשה למקור נתונים, והשנייה לוקחת HttpServlet request ומשתמשת בה במקרים שבהם לא ניתן ליצור DataSourceRequest. תוכלו לראות הטמעה לדוגמה בקטע הגדרת יכולות וזרימת אירועים.

אם אי אפשר להחזיר טבלת נתונים, הספרייה מחזירה שגיאה. אם אפשר להחזיר טבלת נתונים אבל יש בעיה בדיווח, הספרייה מחזירה אזהרה יחד עם טבלת הנתונים. לדוגמה, הספרייה יוצרת אזהרה במצבים הבאים:

  • אם התרשים להמחשת השאילתות מספק LIMIT שמוביל לנתונים חתוכים.
  • אם התרשים להמחשת השאילתות שולח בקשה לתבנית עיצוב לא חוקית בסעיף FORMAT.

כדי להוסיף אזהרה משלכם, יוצרים מכונה של base.Warning ומוסיפים אותו לטבלת הנתונים באמצעות השיטה addWarning().

רישום ביומן

בספרייה נעשה שימוש ברישום ביומן של Jakarta Commons. אפשר להשתמש ברישום ביומן של Jakarta Commons ברוב מערכות הרישום הנפוצות שאולי כבר קיימות. אם מערכת הרישום ביומן לא סטנדרטית, יכול להיות שתצטרכו לכתוב מתאם. לפרטים נוספים, ראו את דף הבית של Jakarta Commons Logs.

כשמתרחשת חריגה, מידע נשלח ליומן. אופן הגישה ליומן משתנה בהתאם למערכת הרישום ביומן שבה משתמשים.