סקירה כללית וצורך בהאצלת FilterProxy באביב

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

ה DelegatingFilterProxy הוא מסנן סרוולט המאפשר העברת שליטה אל לְסַנֵן שיעורים שיש להם גישה להקשר יישום האביב. אביב אבטחה מסתמך על טכניקה זו בכבדות.

במדריך זה נסקור אותו בפירוט.

2. DelegatingFilterProxy

Javadoc עבור DelegatingFilterProxy קובע שזה א

פרוקסי למסנן סרוולט סטנדרטי, המאציל לשעועית מנוהלת קפיץ המיישמת את ממשק הפילטר.

כאשר אנו משתמשים במסנני סרוולט, מן הסתם עלינו להכריז עליהם כ- מחלקת פילטר בתצורת ה- Java שלנו או web.xmlאחרת, מיכל ה- servlet יתעלם מהם. אביב DelegatingFilterProxy מספק את הקישור בין web.xml והקשר היישום.

2.1. עבודה פנימית של DelegatingFilterProxy

בואו נסתכל איך DelegatingFilterProxy מעביר את השליטה לשעועית האביב שלנו.

במהלך האתחול, DelegatingFilterProxy מביא את שם מסנן ומאחזר את השעועית עם השם הזה מהקשר היישום של Spring. שעועית זו חייבת להיות מסוג javax.Servlet.Filter, כלומר פילטר סרוולט "רגיל". בקשות נכנסות יועברו לאחר מכן לשעועית המסנן הזו.

בקצרה, DelegatingFilterProxydoFilter () השיטה תאציל את כל השיחות לשעועית אביב, ותאפשר לנו להשתמש בכל תכונות ה- Spring בתוך שעועית הפילטר שלנו.

אם אנו משתמשים בתצורה מבוססת Java, רישום הפילטר שלנו ב ApplicationInitializer יוגדר כ:

@Override מוגן javax.servlet.Filter [] getServletFilters () {DelegatingFilterProxy delegateFilterProxy = חדש DelegatingFilterProxy (); delegateFilterProxy.setTargetBeanName ("applicationFilter"); להחזיר מסנן חדש [] {delegateFilterProxy}; }

אם אנו משתמשים ב- XML, אז ב web.xml קוֹבֶץ:

 applicationFilter org.springframework.web.filter.DelegatingFilterProxy 

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

2.2. צורך ב DelegatingFilterProxy

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

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

DelegatingFilterProxy גם ממנף הפעלת מסננים ספציפיים או מרובים לפי נתיבי URI בקשה על ידי מתן התצורה בהקשר היישום של Spring או בתוך web.xml.

3. יצירת מסנן מותאם אישית

כמתואר לעיל, DelegatingFilterProxy הוא מסנן סרוולט עצמו המועבר לשעועית ספציפית המנוהלת על ידי אביב המיישמת את לְסַנֵן מִמְשָׁק.

בחלקים הבאים ניצור מסנן מותאם אישית ונתגדיר אותו באמצעות תצורה מבוססת Java ו- XML.

3.1. כיתת סינון

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

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

@Component ("loggingFilter") מחלקה ציבורית CustomFilter מיישם מסנן {לוגר סטטי פרטי LOGGER = LoggerFactory.getLogger (CustomFilter.class); @Override public void init (FilterConfig config) זורק ServletException {// אתחל משהו} @Override public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) זורק IOException, ServletException {HttpServletRequest req = (HttpServletRequ; LOGGER.info ("בקש מידע:" + בקשה); chain.doFilter (בקשה, תגובה); } @ ביטול הרס ציבורי הרס () {// קוד ניקוי, במידת הצורך}} 

CustomFilter מכשירים javax.Servlet.Filter. בכיתה זו יש @רְכִיב ביאור להרשמה כשעועית אביב בהקשר היישום. בדרך זו, ה DelegatingFilterProxy class יכול למצוא את מחלקת המסננים שלנו בזמן אתחול שרשרת המסננים.

שים לב ששמה של שעועית האביב חייב להיות זהה לערך ב- שם מסנן מסופק במהלך רישום המסנן המותאם אישית ב- ApplicationInitializer בכיתה או ב web.xml יותר מאוחר כי ה- DelegatingFilterProxy מחלקה תחפש את שעועית המסנן עם אותו שם בדיוק בהקשר היישום.

אם היא לא מצליחה למצוא שעועית בשם זה, היא תעלה חריג בעת הפעלת היישום.

3.2. קביעת תצורה של המסנן באמצעות תצורת Java

כדי לרשום מסנן מותאם אישית באמצעות תצורת Java, עלינו לעקוף את ה- getServletFilters () שיטה של תקציר AnnotationConfigDispatcherServletInitializer:

מחלקה ציבורית ApplicationInitializer מרחיב את AbstractAnnotationConfigDispatcherServletInitializer {// כמה שיטות אחרות כאן @Override מוגן javax.servlet.Filter [] getServletFilters () {DelegatingFilterProxy delegateFilterProxy = new DelegatingFilterProxy (); delegateFilterProxy.setTargetBeanName ("loggingFilter"); להחזיר מסנן חדש [] {delegateFilterProxy}; }}

3.3. הגדרת התצורה של המסנן באמצעות web.xml

בואו נראה איך תצורת המסנן ב web.xml נראה כמו:

 loggingFilter org.springframework.web.filter.DelegatingFilterProxy loggingFilter / * 

ה מחלקת פילטר הטיעון הוא מסוג DelegatingFilterProxy ולא מחלקת הסינון שיצרנו. אם אנו מריצים קוד זה ונלחץ על כתובת אתר כלשהי, אז doFilter () שיטת ה- CustomFilter יבוצע ויציג את פרטי פרטי הבקשה בקובץ היומן.

4. מסקנה

במאמר זה סקרנו כיצד DelegatingFilterProxy עובד וכיצד להשתמש בו.

אביב ביטחון עושה שימוש נרחב ב DelegatingFilterProxy לאבטחת שיחות ומשאבי ה- API באינטרנט מגישה לא מורשית.

קוד המקור זמין ב- GitHub.


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