Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Ez egy AI által fordított bejegyzés.

제이온

[Spring] Mi a Filter, Interceptor és Argument Resolver?

  • Írás nyelve: Koreai
  • Referencia ország: Minden ország country-flag

Válasszon nyelvet

  • Magyar
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी

A durumis AI által összefoglalt szöveg

  • A szűrő a J2EE szabványos specifikációja, amely a diszpécser szervletnek való átadás előtt/után további műveleteket végezhet az URL-mintákkal illeszkedő összes kéréshez. A webes konténerben fut, míg az interceptor egy Spring által biztosított technológia, amely lehetővé teszi a kérések és válaszok megtekintését vagy feldolgozását a diszpécser szervlet által a vezérlő hívások előtt és után. A Spring kontextusban működik.
  • Az Argument Resolver egy olyan mechanizmus, amely indirekt módon segíthet a kívánt objektum létrehozásában a vezérlőbe érkező kérés bejövő értékeiből.
  • A szűrők és interceperek között az a különbség, hogy a Spring konténerben vagy a webes konténerben futnak-e, valamint hogy a diszpécser szervlet vagy a vezérlő alapján dolgozzák fel a kéréseket. Az Argument Resolver az interceptor után fut és egy adott objektumot ad vissza.

Mi a szűrő (Filter)?

A szűrő a J2EE szabványos specifikáció része, amely lehetővé teszi, hogy kiegészítő műveleteket hajtson végre minden olyan kérésre, amely megfelel egy URL-mintának, mielőtt azok eljutnának a Dispatcher Servlethez. Más szóval, a Spring konténer helyett a Tomcathez hasonló webes konténer kezeli őket, így a kérelmek a Dispatcher Servlethez való eljutás előtt feldolgozódnak.



Szűrő (Filter) implementáció

A szűrők hozzáadásához a javax.servlet Filter interfészt kell implementálni, amely a következő három módszert tartalmazza.


  • init metódus
    • Ez a metódus inicializálja a szűrő objektumot és hozzáadja a szolgáltatáshoz. A webes konténer egyszer hívja az init metódust a szűrő objektum inicializálásához. Ezt követően a kérelmeket a doFilter() metóduson keresztül dolgozzák fel.
  • doFilter metódus
    • Ez a metódus a webes konténer által futtatódik, mielőtt a megfelelő URL-mintához tartozó HTTP kérelmek eljutnának a Dispatcher Servlethez, és mielőtt a Dispatcher Servlet HTTP válaszokat küldene a kliensnek.
      A doFilter() paraméterként a FilterChain-t tartalmazza. A FilterChain doFilter() metódusával tovább lehet küldeni a kérelmeket a következő célpontra. A chain.doFilter() metódus meghívása előtt és után elhelyezhetjük a szükséges feldolgozási lépéseket a kívánt műveletek végrehajtásához.
  • destory metódus
    • Ez a metódus eltávolítja a szűrő objektumot a szolgáltatásból és visszaadja a használt erőforrásokat. A webes konténer egyszer hívja ezt a metódust, és a doFilter() metóduson keresztül további feldolgozás nem lesz.


Példa kód - Servlet specifikáció

@WebFilter("/*")
public class dolphagoFilter implements Filter {

    @Override
      public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
      public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain filterChain) throws IOException, ServletException {
        //Itt a előfeldolgozás
        request.setCharacterEncoding("UTF-8");
        System.out.println("doFilter() előtt....");

        filterChain.doFilter(request, response);

        //Itt a utófeldolgozás
        System.out.println("doFilter() után....");
      }

    @Override
      public void destroy() {    }


Példa kód - @Component

@Order(1)
@Component
public class CustomFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException { }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() { }


  • @Component: A szűrő regisztrálható Spring Bean-ként.
  • @Order: Ha több szűrő van, akkor lehetőség van a sorrendjük beállítására.
  • Ha a szűrő regisztrálva van Spring Bean-ként, akkor a Spring specifikációhoz tartozó más Bean-eket is használhatja.


Példa kód - @Configuration

@Configuration
public class CustomRegistrationBean {

    @Bean
    public FilterRegistrationBean customFilterBean() {
        FilterRegistrationBean registration = new FilterRegistrationBean<>();
        registration.setFilter(new CustomFilter());
        registration.setOrder(1);
        registration.addUrlPatterns("/api/*");
        return registration;
    }

Ha egy szűrőt csak bizonyos URI-kra szeretnénk alkalmazni, akkor a FilterRegistrationBean osztályt használva regisztrálhatjuk Spring Bean-ként.


Szűrő (Filter) felhasználási terület

Főként a kérelmek paraméterének ellenőrzésére és feldolgozására szolgálnak.


  • Biztonsági kapcsolódó közös műveletek
    • A szűrők a webes konténerben futnak, így a biztonsági ellenőrzéseket (pl. XSS, CSRF védelem) végrehajthatják, és blokkolhatják a hibás kérelmeket. Így a kérelmek a Spring konténerbe nem jutnak el, ami növeli az alkalmazás biztonságát.
  • Naplózás minden kéréshez
  • Kép/adat tömörítés és karakterlánc kódolás
    • A szűrők implementálhatnak olyan általános funkciókat, mint a képek vagy adatok tömörítése vagy a karakterlánc kódolás, amelyeket a webes alkalmazás egészében használnak.
  • ServletRequest testreszabása
    • A HttpServletRequest objektum csak egyszer tudja beolvasni a Body tartalmát. Ezért a szűrők vagy az intercepteők nem tudják beolvasni a Body-t. A Body naplózásához testreszabott ServletRequest objektumot hozhatunk létre.


Interceptor (Interceptor)

Mi az Interceptor (Interceptor)?

Az Interceptor (Interceptor) a J2EE szabványos specifikációjától eltérően a Spring által biztosított technológia, amely lehetővé teszi a kérelmek és válaszok hivatkozását vagy feldolgozását a Dispatcher Servlet által a kontroller meghívása előtt és után. Más szóval, a webes konténerben futó szűrőkkel ellentétben az intercepteők a Spring kontextusban futnak.


A Dispatcher Servlet a megfelelő kontroller megtalálásához kérelmet küld a Handler Mappingnek, amely válaszként egy végrehajtási láncot (HandlerExecutionChain) ad vissza. Ha az végrehajtási láncban több interceptor van regisztrálva, akkor sorrendben futnak, mielőtt a kontroller végrehajtódik. Ha nincs interceptor, akkor közvetlenül a kontroller fut.


Interceptor (Interceptor) implementáció

Az intercepteők hozzáadásához az org.springframework.web.servlet.HandlerInterceptor interfészt kell implementálni, amely a következő három módszert tartalmazza.


  • preHandle metódus
    • A preHandle metódus a kontroller meghívása előtt fut. Ez a metódus használható előfeldolgozási műveletekhez, a kérelem adatainak feldolgozásához vagy hozzáadásához.
    • A preHandle metódus harmadik paramétere, a handler paraméter egy olyan absztrakt objektum, amely a @RequestMapping annotációval ellátott metódus adatait tartalmazza.
    • A preHandle metódus visszatérési típusa boolean. Ha a visszatérési érték true, akkor a feldolgozás a következő lépésre megy, de ha false, akkor a feldolgozás leáll, és a további műveletek (a következő interceptor vagy a kontroller) nem lesznek végrehajtva.
  • postHandle metódus
    • A postHandle metódus a kontroller meghívása után fut. Ez a metódus használható utófeldolgozási műveletekhez.
  • afterCompletion metódus
    • Az afterCompletion metódus, ahogy a neve is sugallja, a végső eredmény létrehozása után, beleértve a nézetek létrehozását is, fut.


Példa kód

@Component
public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    }
}

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomInterceptor());
        registry.addInterceptor(new LoggingInterceptor());
    }


  • A létrehozott interceptor regisztrálása Bean-ként.
  • A létrehozott interceptor regisztrálása a WebMvcConfigurer interfész addInterceptors() metódusában.
  • Az intercepteők az InterceptorRegistry-ben való regisztrálásuk sorrendjében futnak.


Interceptor (Interceptor) felhasználási terület

Főként a szolgáltatás logika felhasználásával a kérelmek adatainak konzisztenciáját kezelik.


  • Hitelesítés/engedélyezéshez kapcsolódó közös műveletek
    • Az intercepteők a kontrollerbe való belépés előtt végrehajthatnak olyan ellenőrzéseket, mint a hitelesítés vagy az engedélyezés, amelyek a kliens kéréseihez kapcsolódnak.
  • API hívások naplózása
    • A kapott HttpServletRequest és HttpServletResponse objektumok segítségével rögzíthetjük a kliens információkat.
  • Adatfeldolgozás a Controller-be való átadás előtt
    • A kapott HttpServletRequest és HttpServletResponse objektumok feldolgozásával átadhatjuk az adatokat a controllernek.
  • AOP utánzás
    • A preHandle() metódus harmadik paramétere, a HandlerMethod objektum révén megtudhatjuk a végrehajtandó metódus szignatúráját és egyéb információkat, amelyeket felhasználhatunk a logika végrehajtásának döntéséhez.


Szűrő (Filter) vs Interceptor (Interceptor)

  • A szűrők a webes kontextusban futnak, az intercepteők pedig a Spring kontextusban, így a végrehajtási időpontjuk eltérő.
  • A szűrők a Dispatcher Servlet végrehajtása előtt és után is dolgozhatnak, míg az intercepteők a kontroller végrehajtása előtt és után is.
  • A szűrők használata akkor ajánlott, ha olyan feladatokat kell végrehajtani, amelyek függetlenek a Springtől, globálisan kell feldolgozni a kérelmeket, ellenőrizni kell a kérelmek paraméterit vagy használni kell a ServletRequest objektumot a HttpServletRequest helyett.
  • Az intercepteők akkor ajánlottak, ha globálisan kell feldolgozni a Spring által kapott kliens kérelmekkel kapcsolatos feladatokat, vagy ha be kell vonni a szolgáltatás logikát.
  • Az intercepteők a @ControllerAdvice és @ExceptionHandler annotációk használatával tudnak kivételeket kezelni, a szűrők azonban nem tudnak ezt megtenni.
    • A szűrők általában try~catch blokkal veszik körül a doFilter() metódust, és közvetlenül kezelik a kivételeket.


Argument Resolver

Mi az Argument Resolver?

Az Argument Resolver közvetett módon képes létrehozni a kívánt objektumokat a kontrollernek küldött kérelmek adataiból.


Argument Resolver felhasználási terület

Például képzeljük el, hogy egy JWT tokennel érkezik egy kérés. A token érvényességének ellenőrzése és a tokenben tárolt azonosító kinyerése után szükség van egy bejelentkezett felhasználói objektum létrehozására.

Argument Resolver nélkül minden kontrollernek implementálnia kellene a token érvényességének ellenőrzését és a bejelentkezett felhasználói objektum létrehozását. Ez redundáns kódot eredményezne a felhasználó-ellenőrzést igénylő controllerekben, és növelné a controllerek felelősségét. Az Argument Resolver segít megoldani ezt a problémát.


Argument Resolver implementáció

Az Argument Resolver a HandlerMethodArgumentResolver interfész implementálásával használható. Ez az interfész megköveteli a következő két metódus implementálását.


boolean supportsParameter(MethodParameter parameter);

@Nullable


  • supportsParameter metódus
    • Készítsünk egy annotációt, amelyet a kívánt paraméterek elé lehet helyezni, hogy az Argument Resolver futtatódjon. A supportsParameter() metódus ellenőrzi, hogy a kapott metódus paraméterében szerepel-e a kívánt annotáció, és ha igen, akkor true értéket ad vissza.
  • resolveArgument metódus
    • Ha a supportsParameter() metódus true értéket adott vissza (azaz a kívánt annotációval ellátott paraméter van), akkor ez a metódus felelős a paraméter adatainak megfelelő formátumba való átalakításáért és a visszatérésért.


Az Argument Resolver használata esetén a kontroller implementációja a következő lesz.


@GetMapping("/me")
public ResponseEntity findMemberOfMine(@AuthenticationPrincipal LoginMember loginMember) {
    MemberResponse memberResponse = memberService.findMember(loginMember.getId());
    return ResponseEntity.ok().body(memberResponse);


Argument Resolver és Interceptor (Interceptor) különbségek

  • Az Argument Resolver az interceptor után fut, és egy olyan objektumot ad vissza, amelyet a kontrollernek küldött kérelem adataiból hozott létre.
  • Az interceptor viszont a kontroller végrehajtása előtt lefoglalja a kérelmet, és nem tud objektumot visszaadni. Csak boolean vagy void visszatérési típusok lehetségesek.


Forrás


Várható interjúkérdések és válaszok

Mi a szűrő?

A szűrők olyan mechanizmusok, amelyek lehetővé teszik a kiegészítő műveletek végrehajtását minden olyan kérésre, amely megfelel egy URL-mintának, mielőtt azok eljutnának a Dispatcher Servlethez. A szűrők a servlet konténerben futnak.


Mikor kell szűrőt használni?

A szűrők akkor használhatók, ha olyan feladatokat kell végrehajtani, amelyek függetlenek a Springtől, globálisan kell feldolgozni a kérelmeket, vagy ellenőrizni kell a kérelmek paraméterit.

Tipikus példa a biztonsági kapcsolódó közös műveletek, a naplózás minden kéréshez, a kép/adat tömörítés és karakterlánc kódolás, valamint a ServletRequest testreszabása.


Mi az interceptor?

Az intercepteők a Dispatcher Servlet által a kontroller meghívása előtt és után lehetővé teszik a kérelmek és válaszok hivatkozását vagy feldolgozását. Az intercepteők a Spring konténerben futnak.


Mikor kell interceptort használni?

Az intercepteők akkor használhatók, ha globálisan kell feldolgozni a Spring által kapott kliens kérelmekkel kapcsolatos feladatokat, vagy ha be kell vonni a szolgáltatás logikát.

Tipikus példa a hitelesítés/engedélyezéshez kapcsolódó közös műveletek, az API hívások naplózása, a Controller-be való átadás előtti adatfeldolgozás.


Milyen különbség van a szűrő és az interceptor között?

A szűrők a servlet konténerben futnak, míg az intercepteők a Spring konténerben.

A szűrők a Dispatcher Servlet végrehajtása előtt és után is dolgozhatnak, míg az intercepteők a kontroller végrehajtása előtt és után is.

Ezért a szűrők akkor ajánlottak, ha olyan feladatokat kell végrehajtani, amelyek függetlenek a Springtől, míg az intercepteők akkor ajánlottak, ha globálisan kell feldolgozni a Spring által kapott kliens kérelmekkel kapcsolatos feladatokat.


Mi az Argument Resolver?

Az Argument Resolver olyan mechanizmus, amely a kontrollernek küldött kérelmek adataiból hoz létre objektumokat.


Mikor kell Argument Resolvert használni?

Az Argument Resolver akkor használható, ha egy JWT tokennel érkezik egy kérés, és a token érvényességének ellenőrzése után a tokenben tárolt azonosítóból létre kell hozni egy bejelentkezett felhasználói objektumot.


Mi a különbség az interceptor és az Argument Resolver között?

Az Argument Resolver a kontrollernek küldött kérelem adataiból hoz létre objektumokat, míg az interceptor nem tud objektumot visszaadni. Az interceptor az Argument Resolver előtt fut.

제이온
제이온
제이온
제이온
[Spring] @Async használatának módja Tudja meg, hogyan valósíthatja meg egyszerűen a Java aszinkron feldolgozást a Spring @Async használatával. Az @Async annotációval szinkron metódusokat aszinkronná konvertálhat, és a szálkészlet beállításával növelheti a hatékonyságot. A Future, Listenable

2024. április 25.

[Java] Reflection fogalma és használata A reflexió egy API, amely lehetővé teszi a Java programokban a futásidő alatt a osztályok információinak elérését és a osztályok manipulálását. Futásidőben lehetővé teszi a osztályok létrehozását, a mezők és metódusok elérését, de a kapszulázás megsértésé

2024. április 25.

[Hatékony Java] 6. pont: Kerülje a felesleges objektum létrehozását Útmutató a Java-ban a felesleges objektum létrehozásának minimalizálásához. A String, Boolean és egyéb immutabilis objektumok esetében célszerű literálokat használni, míg a reguláris kifejezéseknél a Pattern példányokat érdemes gyorsítótárazni. Emellett a

2024. április 28.

[Nem informatikai szakember, de fejlesztőként akarok túlélni] 14. Gyakran feltett technikai interjúkérdések összefoglalása kezdő fejlesztők számára Útmutató a kezdő fejlesztők számára a technikai interjúra való felkészüléshez. A fő memóriaterület, adatstruktúrák, RDBMS és NoSQL, eljárási és objektumorientált, átírás és túlterhelés, oldalcserélő algoritmusok, folyamatok és szálak, OSI 7-réteg, TCP és
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024. április 3.

[Szinkronitás] Atomi művelet: Memória kerítés és memória sorrendezés Ez a bejegyzés bemutatja, hogyan kell figyelembe venni a memória sorrendet atomi műveletekben, és megmagyarázza a sorrendezési beállítások fontosságát. Bemutatja a Relaxed, Acquire, Release, AcqRel, SecCst és egyéb sorrendezési beállításokat, valamint rés
곽경직
곽경직
곽경직
곽경직
곽경직

2024. április 12.

[Nem szakmai, fejlesztőként túlélés] 17. Újonc fejlesztő portfóliója, meddig? Az újonc fejlesztő portfóliójában a fejlesztési képességekre kell összpontosítani. A Infra implementálása helyett hatékonyabb a CRUD alapfunkciók befejezése és a külső API-k integrációs tapasztalatainak megszerzése. Használhatók a Naver bejelentkezés, a N
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024. április 3.

[SI fejlesztői történet] 03. SI cég interjúra való felkészülés Az SI fejlesztői interjúknál nem annyira a magas szintű technikai tudás a fontos, mint inkább a kódolási képesség. Ezért a Spring + mybatis szerkezetének megértése, amit a képzési központokban tanulnak, elégséges lehet. A legtöbb esetben nincs kódolás tes
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024. április 16.

[SI fejlesztői történet] 12. Gyakran használt technológiai verem az SI projektekben A dél-koreai SI fejlesztők elsősorban Java alapú Springet, Oracle DB-t, Mybatis-t, JSP-t, JavaScriptet, HTML-t és CSS-t használnak a hatékony és stabil IT rendszerek fejlesztéséhez, és az Eclipse-t használják fejlesztési környezetként. Ezek a technológiák
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024. április 19.

Flitter 1.0.0 kiadás: svg könyvtár a D3 helyett A Flitter egy olyan adatvizualizációs könyvtár, amely segít a webfejlesztőknek könnyen és gyorsan megvalósítani a diagramokat és ábrákat. A deklaratív kódszerkesztés és a fejlett elrendezési számítási funkciók leegyszerűsítik a bonyolult adatvizualizációs
Meursyphus
Meursyphus
Meursyphus
Meursyphus
Meursyphus

2024. május 1.