נתוני אביב עם אבטחת אביב

1. סקירה כללית

Spring Security מספק תמיכה טובה בשילוב עם Spring Data. בעוד שהראשון מטפל בהיבטי אבטחה ביישום שלנו, האחרון מספק גישה נוחה למסד הנתונים המכיל את נתוני היישום.

במאמר זה נדון כיצד ניתן לשלב את Spring Security עם נתוני Spring כדי לאפשר שאילתות ספציפיות יותר למשתמש.

2. אבטחת אביב + תצורת נתוני אביב

בהקדמה שלנו ל- Spring Data JPA, ראינו כיצד להגדיר את נתוני Spring בפרויקט Spring. כדי לאפשר אבטחת קפיץ ונתוני קפיץ, כרגיל, אנו יכולים לאמץ את התצורה מבוססת Java או XML.

2.1. תצורת Java

נזכיר כי מטופס הכניסה של Spring Security Security (סעיפים 4 ו- 5), אנו יכולים להוסיף Spring Security לפרויקט שלנו באמצעות התצורה המבוססת על הערות:

@EnableWebSecurity המחלקה הציבורית WebSecurityConfig מרחיב את WebSecurityConfigurerAdapter {// הגדרות שעועית}

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

כדי לאפשר נתוני אביב באבטחת אביב, אנו פשוט מוסיפים שעועית זו ל WebSecurityConfig:

@Bean SecurityEvaluationContextExtension ציבורי SecurityEvaluationContextExtension () {החזר SecurityEvaluationContextExtension חדש (); }

ההגדרה שלעיל מאפשרת הפעלה של פתרון אוטומטי של ביטויים ספציפיים לנתוני קפיצים המאושרים על כיתות.

2.2. תצורת XML

התצורה מבוססת ה- XML ​​מתחילה בהכללת מרחב השמות של Spring Security:

 ... 

בדיוק כמו בתצורה מבוססת Java, עבור תצורה מבוססת XML או מרחב שמות, היינו מוסיפים SecurityEvaluationContextExtension שעועית לקובץ התצורה של XML:

הגדרת ה- SecurityEvaluationContextExtension הופך את כל הביטויים הנפוצים ב- Spring Security לזמינים מתוך שאילתות Spring Data.

ביטויים נפוצים כאלה כוללים עיקרי, אימות, הוא אנונימי (), hasRole ([תפקיד]), הוא מאומת, וכו '

3. שימוש לדוגמא

בואו ניקח בחשבון כמה מקרי שימוש של נתוני אביב ואבטחת אביב.

3.1. לְהַגבִּיל AppUser עדכון שדה

בדוגמה זו נבחן הגבלה אפליקציהמִשׁתַמֵשׁשל כניסה אחרונה עדכון שדה למשתמש היחיד המאומת כרגע.

לפי זה, אנו מתכוונים לכך בכל עת updateLastLogin השיטה מופעלת, היא רק מעדכנת את כניסה אחרונה השדה של המשתמש המאומת כעת.

כדי להשיג זאת, אנו מוסיפים את השאילתה שלהלן לשילוב שלנו UserRepository מִמְשָׁק:

@Query ("UPDATE AppUser u SET u.lastLogin =: lastLogin WHERE" + "u.username =? # {Principal? .Username}") update public voidLastLogin (תאריך כניסה אחרונה);

ללא נתוני אביב ושילוב אבטחת אביב, בדרך כלל נצטרך להעביר את שם המשתמש כוויכוח אל updateLastLogin.

במקרה בו מסופקים אישורי משתמש שגויים, תהליך הכניסה ייכשל ואנחנו לא צריכים לטרוח על מנת להבטיח אימות גישה.

3.2. אחזור ספציפי AppUser ' תוכן עם עימוד

תרחיש נוסף שבו Spring Data ו- Spring Security עובדים בצורה מושלמת יד ביד הוא מקרה בו עלינו לאחזר תוכן ממאגר המידע שלנו הנמצא בבעלות המשתמש המאומת כעת.

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

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

ממשק ציבורי TweetRepository מרחיב את PagingAndSortingRepository {@Query ("בחר twt מציוץ twt הצטרף ל- twt.likes כמו lk איפה lk? # {principal? .username} או twt.owner =? # {principal? .username}") דף getMyTweetsAndTheOnesILiked (Pageable ניתן לעמוד); }

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

4. מסקנה

אביב נתונים ושילוב אבטחת אביב מביאים גמישות רבה לניהול מצבים מאומתים ביישומי אביב.

בפגישה זו בדקנו כיצד להוסיף אבטחת אביב לנתוני אביב. מידע נוסף על תכונות רבות עוצמה אחרות של Spring Data או Spring Security ניתן למצוא באוסף המאמרים שלנו בנושא Spring Data ו- Spring Security.

כרגיל, ניתן למצוא קטעי קוד ב- GitHub.