כיצד להשבית הפניות להפניית אבטחה באביב

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

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

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

2. התנתקות באבטחת אביב

בקיצור, Spring Security מספק תמיכה מחוץ לקופסה למנגנון ההתנתקות דרך ה- להתנתק() שיטת DSL. בעיקרון, אביב אבטחה מפעיל התנתקות כאשר משתמש פוגע בכתובת האתר של ברירת המחדל להתנתקות שהיא /להתנתק.

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

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

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

3. השבת הפניית הפניה מחדש של אבטחת אביב

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

שים לב שאנחנו יכולים לעקוף את כתובת האתר להפניה המוגדרת כברירת מחדל בעזרת ה- logoutSuccessUrl () שיטת DSL.

הנקודה העיקרית כאן היא להראות כיצד להימנע מניתוב מחדש כאשר ה- /להתנתק כתובת אתר מתקשרת מלקוח REST.

למען האמת, ה עֵץoutSuccessHandler ממשק מציע דרך גמישה לבצע לוגיקה מותאמת אישית כאשר תהליך ההתנתקות מבוצע בהצלחה.

אז הנה, אנחנו השתמש בהתאמה אישית LogoutSuccessHandler להחזיר רק קוד סטטוס 200 נקי. בדרך זו, זה לא ינתב אותנו לשום דף.

עכשיו, בואו נשתמש בתצורה הנדרשת של אבטחת אביב הנדרשת בכדי להשבית הפניות מחדש של יציאה מההפעלה:

@Configuration @EnableWebSecurity המחלקה הציבורית SpringSecurityConfig מרחיב את WebSecurityConfigurerAdapter {@Override מוגן בטל התצורה (HttpSecurity http) זורק חריג {http .authorizeRequests (authz -> authz .mvcMatchers ("/ login"). PermitAest () .any. ) .logout (logout -> logout .permitAll () .logoutSuccessHandler ((בקשה, תגובה, אימות) -> {response.setStatus (HttpServletResponse.SC_OK);});}}

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

זכור כי אנו יכולים גם ליצור מחזור יישום פשוט של ה- LogoutSuccessHandler ממשק והשתמש ב- DSL כדי להעביר אותו ל- logoutSuccessHandler () שיטה.

4. בדיקות

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

שים לב שנשתמש MockMvc לשלוח /להתנתק בקשה במבחן שלנו.

ראשית, בואו ליצור שיעור מבחן פשוט ולהזריק את ה- MockMvc חפץ בו:

כיתה ציבורית LogoutApplicationUnitTest {@ MowMvc פרטי mowMvc פרטי; // מקרה מבחן}

עַכשָׁיו, בוא נכתוב שיטה לבדיקה שלנו /להתנתק נקודת סיום:

@Test ציבורי בטל כאשרLogout_thenDisableRedirect () זורק חריג {this.mockMvc.perform (פוסט ("/ יציאה"). עם (csrf ()) ) .doesNotExist ()). andExpect (לא מאומת ()). andReturn (); }

לבסוף, בואו ננסה לפרק את קוד הבדיקה שלנו:

  • לבצע (פרסם ("/ יציאה")) קוראת ל /להתנתק נקודת קצה כבקשת POST פשוטה
  • עם (csrf ()) מוסיף את הצפוי _csrf פרמטר לשאילתה
  • סטָטוּס() מחזיר את קוד הסטטוס של תגובת HTTP
  • jsonPath () מאפשר לגשת ולבדוק את גוף תגובת ה- HTTP

5. מסקנה

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

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


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