יציאה ידנית עם אבטחת אביב

1. הקדמה

Spring Security הוא הסטנדרט לאבטחת יישומים מבוססי Spring. יש לו כמה תכונות לניהול אימות המשתמש, כולל כניסה ויציאה.

במדריך זה נתמקד התנתקות ידנית עם Spring Security.

אנו נניח כי הקוראים כבר מבינים את תהליך ההתנתקות הסטנדרטי של Spring Security.

2. התנתקות בסיסית

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

  1. בטל מידע על הפעלת HTTP.
  2. ברור אבטחה הקשר מכיוון שהוא מכיל מידע אימות.

שתי הפעולות הללו מבוצעות על ידי SecurityContextLogoutHandler.

בואו נראה את זה בפעולה:

@Configuration מחלקה ציבורית DefaultLogoutConfiguration מרחיב את WebSecurityConfigurerAdapter {@Override מוגן חלל מוגדר (HttpSecurity http) זורק חריג {http .logout (יציאה -> logout .logoutUrl ("/ basic / basiclogout") .addLogoutHandler (חדש SecurityContextLogoutHand); }}

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

3. יציאת ניקוי קובצי cookie

לעתים קרובות, התנתקות מחייבת אותנו גם לנקות את כל קובצי ה- cookie של המשתמש או את כולם.

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

המחלקה הציבורית @Configuration AllCookieClearingLogoutConfiguration מרחיב את WebSecurityConfigurerAdapter {@Override מוגן חלל להגדיר (HttpSecurity http) זורק חריג {http .logout (התנתק -> logout .logoutUrl ("/ עוגיות / cookielogout") .addLogoutHandler ((בקשה, תגובה)> {for (Cookie cookie: request.getCookies ()) {String cookieName = cookie.getName (); cookie cookieToDelete = cookie חדש (cookieName, null); cookieToDelete.setMaxAge (0); response.addCookie (cookieToDelete);}}) ); }}

מצד שני, Spring Security מספקת CookieClearingLogoutHandler שהוא מטפל בהתנתקות מוכן לשימוש להסרת קובצי cookie.

4. נקה נתוני אתר כניסה לכותרת

לחלופין, אנו יכולים להשתמש בכותרת תגובת HTTP מיוחדת כדי להשיג את אותו הדבר; זה המקום בו נקה נתוני אתר כּוֹתֶרֶת נכנס לשחק. ה אתר נתונים נקיים הכותרת מנקה את נתוני הגלישה (קובצי Cookie, אחסון, זיכרון מטמון) המשויכים לאתר המבקש:

מחלקה ציבורית @Configuration ClearSiteDataHeaderLogoutConfiguration מרחיב את WebSecurityConfigurerAdapter {סופי סטטי פרטי ClearSiteDataHeaderWriter.Directive [] SOURCE = {CACHE, COOKIES, STORAGE, EXECUTION_CONTEXTS}; התצורה הריקה מוגנת של @Override (HttpSecurity http) זורקת חריג {http .logout (יציאה -> יציאה .logoutUrl ("/ csd / csdlogout") .addLogoutHandler (HeaderWriterLogoutHandler חדש (ClearSiteDataHeaderWriter חדש (מקור)))); }}

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

5. מסקנה

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

כמו תמיד, הקוד עבור דוגמאות אלה זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found