מצא את מסנני האבטחה הרשומים באביב

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

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

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

2. איתור באגים באבטחה

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

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

@EnableWebSecurity (ניקוי באגים = נכון)

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

נוכל גם לראות את כל שרשרת מסנני האבטחה:

שרשרת מסנני אבטחה: [WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter LogoutFilter שם משתמש סיסמא אימות Filter // ...]

3. כניסה

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

אנו יכולים לאפשר רישום על ידי הוספת השורה הבאה ל application.properties:

logging.level.org.springframework.security.web.FilterChainProxy = DEBUG

הנה היומן הקשור:

DEBUG o.s.security.web.FilterChainProxy - / foos / 1 במיקום 1 מתוך 12 בשרשרת מסננים נוספת; מסנן ירי: 'WebAsyncManagerIntegrationFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 במיקום 2 מתוך 12 בשרשרת פילטרים נוספת; מסנן ירי: 'SecurityContextPersistenceFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 במיקום 3 מתוך 12 בשרשרת מסננים נוספת; מסנן ירי: 'HeaderWriterFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 במיקום 4 מתוך 12 בשרשרת מסננים נוספת; מסנן ירי: 'LogoutFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 במיקום 5 מתוך 12 בשרשרת מסננים נוספת; מסנן ירי: 'UsernamePasswordAuthenticationFilter' ...

4. השגת המסננים באופן תכנותי

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

נשתמש FilterChainProxy כדי להשיג את מסנני האבטחה.

ראשית, בואו לחווט אוטומטית את springSecurityFilterChain אפונה:

@Autowired @Qualifier ("springSecurityFilterChain") מסנן פרטי springSecurityFilterChain;

הנה, השתמשנו ב- @מַגְדִיר עם השם springSecurityFilterChain עם סוג לְסַנֵן במקום FilterChainProxy. הסיבה לכך היא שהשיטה של springSecurityFilterChain () ב WebSecurityConfiguration, היוצר את שרשרת המסננים של Spring Security, סוג החזרה לְסַנֵן ולא FilterChainProxy.

לאחר מכן, נזרוק את האובייקט הזה אליו FilterChainProxy ולקרוא ל getFilterChains () שיטה:

בטל ציבורי getFilters () {FilterChainProxy filterChainProxy = (FilterChainProxy) springSecurityFilterChain; רשימת רשימה = filterChainProxy.getFilterChains (); list.stream () .flatMap (chain -> chain.getFilters (). stream ()) .forEach (filter -> System.out.println (filter.getClass ())); }

והנה פלט לדוגמא:

class org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter class org.springframework.security.web.context.SecurityContextPersistenceFilter class org.springframework.security.web.header.HeaderWriterFilter. .logout.LogoutFilter מחלקה org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ...

שים לב שמאז Spring Security 3.1, FilterChainProxy מוגדר באמצעות רשימה של SecurityFilterChain. עם זאת, לרוב היישומים נדרש רק אחד SecurityFilterChain.

5. מסנני אבטחה אביביים חשובים

לבסוף, בואו נסתכל על כמה מסנני האבטחה החשובים:

  • UsernamePasswordAuthenticationFilter: אימות תהליכים, מגיב כברירת מחדל לכתובת URL "/ login"
  • אנונימי אימות פילטר: כשאין אובייקט אימות ב- SecurityContextHolder, הוא יוצר אובייקט אימות אנונימי ושם אותו שם
  • FilterSecurityInterceptor: להעלות חריגים כאשר הגישה נדחית
  • ExceptionTranslationFilter: לתפוס חריגים באביב הביטחוני

6. מסקנה

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

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


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