יציאת אבטחה באביב

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

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

2. תצורה בסיסית

התצורה הבסיסית של פונקציונליות של יציאת אביב משתמש ב להתנתק() השיטה פשוטה דיה:

@Configuration @EnableWebSecurity המחלקה הציבורית SecSecurityConfig מרחיב את WebSecurityConfigurerAdapter {@Override מוגן חלל להגדיר (HttpSecurity הסופי http) זורק חריג {http // ... .logout () // ...} // ...}

ושימוש בתצורת XML:

 ...  

האלמנט מאפשר את מנגנון ההתנתקות המוגדר כברירת מחדל - אשר מוגדר להשתמש בהמשך כתובת אתר להתנתק: /להתנתק שהיה פעם / j_spring_security_logout לפני אביב הביטחון 4.

3. JSP וקישור התנתקות

בהמשך לדוגמה הפשוטה הזו, הדרך לספק א קישור התנתקות ביישום האינטרנט הוא:

להתנתק 

4. התאמות אישיות מתקדמות

4.1. logoutSuccessUrl ()

לאחר ביצוע תהליך ההתנתקות בהצלחה, Spring Security תנתב את המשתמש לדף שצוין. כברירת מחדל, זהו דף השורש (“/”) אך ניתן להגדרה זו:

// ... .logout () .logoutSuccessUrl ("/ afterlogout.html") // ...

ניתן לעשות זאת גם באמצעות תצורת XML:

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

// ... .logout () .logoutSuccessUrl ("/ login.html") // ...

4.2. logoutUrl ()

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

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

.logout () .logoutUrl ("/ perform_logout")

ובאמצעות XML:

4.3. בטל את HttpSession ו deleteCookies

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

ה deleteCookies השיטה פשוטה גם כן:

.logout () .logoutUrl ("/ perform_logout") .invalidateHttpSession (true) .deleteCookies ("JSESSIONID")

וגרסת ה- XML:

4.4. logoutSuccessHandler ()

לתרחישים מתקדמים יותר, בהם מרחב השמות אינו גמיש מספיק, LogoutSuccessHandler ניתן להחליף שעועית מהקשר האביב בהתייחסות מותאמת אישית:

@Bean Public LogoutSuccessHandler logoutSuccessHandler () {להחזיר CustomLogoutSuccessHandler חדש (); } // ... .logout () .logoutSuccessHandler (logoutSuccessHandler ()); // ...

תצורת ה- XML ​​המקבילה היא:

 ... 

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

המחלקה הציבורית CustomLogoutSuccessHandler מרחיב את SimpleUrlLogoutSuccessHandler מיישם את LogoutSuccessHandler {@ AuditService private AuditService פרטי; @ ביטול ציבורי בטל ב-LogoutSuccess (בקשת HttpServletRequest, תגובה HttpServletResponse, אימות אימות) זורק IOException, ServletException {String refererUrl = request.getHeader ("Referer"); auditService.track ("התנתק מ:" + refererUrl); super.onLogoutSuccess (בקשה, תגובה, אימות); }}

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

5. מסקנה

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

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

כאשר הפרויקט פועל באופן מקומי, ניתן לגשת אל ה- HTML לדוגמא בכתובת:

//localhost:8080/spring-security-mvc-login/login.html