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

Çıkış Yap

translation

Bu, AI tarafından çevrilen bir gönderidir.

제이온

[Spring] Filter, Interceptor, Argument Resolver nedir?

  • tr Writing language: Korece
  • tr Referans Ülke: tr Tüm ülkeler country-flag

Dil Seç

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

Text summarized by durumis AI

  • Filtreler, Dispatcher Servlet'e istek iletilmeden önce/sonra URL kalıbıyla eşleşen tüm istekler için ek işlemleri işleyebilecek işlevsellik sağlayan J2EE standart özelliktir. Web sunucusunda çalışır ve ara kesiciler, Dispatcher Servlet'in denetleyiciyi çağırmadan önce ve sonra isteği ve yanıtı başvurabilen veya işleyebilen işlevsellik sağlayan Spring tarafından sağlanan bir teknolojidir. Spring bağlamında çalışır.
  • Argüman Çözümleyici, herhangi bir isteğin denetleyiciye girdiğinde, isteğe gelen değerlerden istediğiniz nesneyi dolaylı olarak oluşturabilir.
  • Filtreler ve ara kesiciler, Spring kapsayıcısında mı yoksa web kapsayıcısında mı çalıştıkları, Dispatcher Servlet'i mi yoksa denetleyiciyi mi referans alarak istekleri işleyip işlemedikleri açısından farklılık gösterir. Argüman Çözümleyici, ara kesiciden sonra çalışır ve belirli bir nesneyi döndürür.

Filtre (Filter) nedir?

Filtre, J2EE standart spesifikasyonunda bulunan bir özelliktir. İstekler Dispatcher Servlet'e ulaşmadan önce/sonra URL kalıplarına uyan tüm istekler için ek işlemler gerçekleştirme imkânı sağlar. Yani, Spring Container değil, Tomcat gibi web container tarafından yönetilir, bu nedenle istekler Dispatcher Servlet'e ulaşmadan önce işlenir.



Filtre (Filter) uygulama

Bir filtre eklemek için javax.servlet'in Filter arayüzünü uygulamanız gerekir. Bu arayüz, aşağıdaki 3 yöntemi içerir.


  • init yöntemi
    • Filtre nesnesini başlatmak ve hizmete eklemek için bir yöntemdir. Web container init yöntemini bir kez çağırır, filtre nesnesini başlatır. Daha sonraki istekler, doFilter() yöntemi aracılığıyla işlenir.
  • doFilter yöntemi
    • URL kalıbına uyan tüm HTTP istekleri, Dispatcher Servlet'e ulaşmadan önce web container tarafından yürütülür. Dispatcher Servlet, istekleri HTTP yanıtını istemciye göndermeden önce web container tarafından yürütülür.
      doFilter() parametresi olarak bir FilterChain bulunur. FilterChain'in doFilter() yöntemi, isteği bir sonraki hedefe iletir. İsteği chain.doFilter()'den önce/sonra eklediğiniz işlem adımları, istediğiniz işlemi gerçekleştirmenizi sağlayacaktır.
  • destory yöntemi
    • Filtre nesnesini hizmetten kaldırmak ve kullandığı kaynakları geri döndürmek için bir yöntemdir. Bu, web container tarafından bir kez çağırılır ve daha sonra doFilter() tarafından işlenmez.


Örnek kod - Servlet spesifikasyonu

@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 {
        //Burada ön işleme
        request.setCharacterEncoding("UTF-8");
        System.out.println("doFilter() öncesi....");

        filterChain.doFilter(request, response);

        //Burada son işleme
        System.out.println("doFilter() sonrası....");
      }

    @Override
      public void destroy() {    }


Örnek kod - @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: Filtreyi Spring Bean olarak kaydedebilir.
  • @Order: Birden fazla filtre varsa, bunları sırayla düzenleyebilirsiniz.
  • Servlet spesifikasyonuna uygun bir filtreyi bu şekilde Spring Bean olarak kaydettiğinizde, Spring spesifikasyonuna uygun diğer Bean'leri de kullanabilirsiniz.


Örnek kod - @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;
    }

Belirli bir URI'da filtreyi çalıştırmak istiyorsanız, filtreyi Spring Bean olarak kaydetmek için FilterRegistrationBean kullanabilirsiniz.


Filtre (Filter) amaçları

Genellikle istek parametrelerinin kendisinin doğrulanması ve işlenmesinden sorumludur.


  • Güvenlikle ilgili genel görevler
    • Filtre, web container'da çalıştığı için güvenlik denetimlerini (XSS, CSRF savunması vb.) gerçekleştirebilir ve geçersiz istekleri engelleyebilir. İstekler Spring Container'a ulaşmadan engellendiği için güvenliği daha da artırabilirsiniz.
  • Tüm istekler için günlük kaydı
  • Görüntü/veri sıkıştırma ve dize kodlaması
    • Filtre, web uygulamasında genel olarak kullanılan görüntü veya veri sıkıştırması veya dize kodlaması gibi işlevleri uyguladı.
  • ServletRequest özelleştirmesi
    • HttpServletRequest, Body içeriğini yalnızca bir kez okuyabilir. Bu nedenle, Filter veya Interceptor, Body'yi okuyamaz. Body'yi günlüğe kaydetmek için, özel bir ServletRequest oluşturabilirsiniz.


Interceptor (Interceptor)

Interceptor (Interceptor) nedir?

Interceptor (Interceptor), J2EE standart spesifikasyonunda bulunan filtre (Filter) ile tersine olarak, Spring tarafından sağlanan bir teknolojidir ve Dispatcher Servlet'in denetleyiciyi çağırmasından önce ve sonra istek ve yanıtları referans alabilir veya işleyebilir. Yani, web container'da çalışan filtrelerin aksine, interceptor'lar Spring bağlamında çalışır.


Dispatcher Servlet, işleyici eşleme aracılığıyla uygun denetleyiciyi bulmak için istekte bulunur ve sonuç olarak yürütme zincirini (HandlerExecutionChain) döndürür. Bu nedenle, bu yürütme zinciri, bir veya daha fazla interceptor kaydedilmişse, interceptor'lardan sırasıyla geçerek denetleyicinin yürütülmesini sağlar ve interceptor yoksa denetleyiciyi doğrudan çalıştırır.


Interceptor (Interceptor) uygulama

Bir interceptor eklemek için org.springframework.web.servlet.HandlerInterceptor arayüzünü uygulamanız gerekir. Bu, aşağıdaki 3 yöntemi içerir.


  • preHandle yöntemi
    • preHandle yöntemi, denetleyici çağırılmadan önce yürütülür. Bu nedenle, denetleyici öncesinde işlenmesi gereken ön işleme işlemleri veya istek bilgileri işlenmesi veya eklenmesi için kullanılabilir.
    • preHandle yönteminin üçüncü parametresi olan handler parametresi, @RequestMapping ile işaretlenmiş yöntemin bilgilerini soyutlayan bir nesnedir.
    • preHandle yönteminin dönüş türü boolean'dır. Dönüş değeri true ise işleme bir sonraki adıma geçer, false ise işlem durdurulur ve daha sonraki işlemler (bir sonraki interceptor veya denetleyici) gerçekleştirilmez.
  • postHandle yöntemi
    • postHandle yöntemi, denetleyici çağırıldıktan sonra yürütülür. Bu nedenle, denetleyici sonrasında işlenmesi gereken son işleme işlemleri varsa kullanılabilir.
  • afterCompletion yöntemi
    • afterCompletion yöntemi, adı da anlaşılacağı üzere, tüm görünümler sonucu oluşturulmayı da içeren tüm işlemler tamamlandıktan sonra yürütülür.


Örnek kod

@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());
    }


  • Oluşturulan interceptor'u Bean olarak kaydeder.
  • WebMvcConfigurer arayüzünün addInterceptors() yöntemine oluşturulan interceptor'u kaydeder.
  • Interceptor'lar, InterceptorRegistry'ye kaydedilme sırasına göre çalışır.


Interceptor (Interceptor) amaçları

Genellikle hizmet mantığını kullanarak istek bilgisi tutarlılığını işlemeyi ele alır.


  • Kimlik doğrulama/yetkilendirme gibi genel görevler
    • Tipik olarak, istemci isteğiyle ilgili işlemler, denetleyiciye geçmeden önce kontrol edilebilir.
  • API çağrıları için günlük kaydı
    • Alınan HttpServletRequest, HttpServletResponse nesneleri aracılığıyla istemci bilgilerini kaydedebilirsiniz.
  • Denetleyiciye iletilen verilerin işlenmesi
    • Alınan HttpServletRequest, HttpServletResponse nesneleri işlenebilir ve denetleyiciye iletilebilir.
  • AOP taklidi
    • preHandle() yönteminin üçüncü parametresi olan HandlerMethod ile yürütülecek yöntemin imzası ve ek bilgiler bulunabilir, böylece çalışma mantığının yürütülüp yürütülmeyeceği belirlenebilir.


Filter (Filter) vs Interceptor (Interceptor)

  • Filtre web bağlamında, interceptor ise Spring bağlamında çalışır, bu nedenle çalışma zamanları farklıdır.
  • Filtre, Dispatcher Servlet'in öncesini ve sonrasını işleyebilirken, interceptor denetleyicinin öncesini ve sonrasını işleyebilir.
  • Filtre, Spring ile ilgili olmaksızın genel olarak işlenmesi gereken işlemleri veya giren parametreleri doğrudan doğrulamak için veya HttpServletRequest yerine ServletRequest kullanmak için iyi bir seçimdir.
  • Interceptor, Spring seviyesinde gelen istemci isteğiyle ilgili genel olarak işlenmesi gereken işlemler veya hizmet mantığını dahil etmesi gerektiğinde iyi bir seçimdir.
  • Interceptor, @ControllerAdvice ve @ExceptionHandler kullanarak istisna işlemini gerçekleştirebilir, ancak filtre bunları kullanarak istisna işlemini gerçekleştiremez.
    • Filtre, genellikle doFilter() yönteminin etrafını try~catch bloğu ile sararak o anda oluşan istisnaları hemen işler.


Argument Resolver

Argument Resolver nedir?

Argument Resolver, herhangi bir isteğin denetleyiciye ulaştığında, istekte gelen değerlerden istediğiniz nesneyi dolaylı olarak oluşturmanızı sağlar.


Argument Resolver amaçları

Örneğin, bir JWT belirteci ile istekte bulunulduğunu varsayalım. Bu belirtecin geçerli bir belirteç olup olmadığını doğrulamalı ve belirteçte depolanan kimliği çıkararak giriş yapan kullanıcı nesnesini oluşturmamız gerekir.

Bu durumda, Argument Resolver kullanılmazsa, belirteci doğrulama ve giriş yapan kullanıcı nesnesine dönüştürme işlemi tüm denetleyicilerde uygulanmalıdır. Bu, kullanıcı doğrulaması gerektiren denetleyicilerde yinelenen kodlara ve denetleyicinin sorumluluğunun artmasına neden olur. Argument Resolver bu sorunu çözebilir.


Argument Resolver uygulama

ArgumentResolver, HandlerMethodArgumentResolver arayüzünü uygulayarak kullanılabilir. Bu arayüz, aşağıdaki iki yöntemi uygulamayı belirtir.


boolean supportsParameter(MethodParameter parameter);

@Nullable


  • supportsParameter yöntemi
    • ArgumentResolver'ın yürütülmesini istediğiniz Parametre'nin önüne belirli bir anotasyon oluşturup ekleyin. supportsParameter() yöntemi, alınan yöntemin argümanında istediğiniz anotasyonun olup olmadığını kontrol eder ve istediğiniz anotasyonu içeriyorsa true döndürür.
  • resolveArgument yöntemi
    • supportsParameter yönteminde true alındığında, yani belirli bir anotasyonlu bir yöntem varsa, parametreyi istediğiniz biçimde bilgiyi bağlayarak döndüren yöntemdir.


Bu şekilde ArgumentResolver kullanıldığında, denetleyicinin uygulaması aşağıdaki gibi olur.


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


Argument Resolver ve Interceptor (Interceptor) arasındaki farklar

  • ArgumentResolver, interceptor'dan sonra çalışır ve herhangi bir isteğin denetleyiciye ulaştığında, istekte gelen değerlerden istediğiniz nesneyi döndürür.
  • Öte yandan, interceptor, denetleyicinin gerçekten yürütülmesinden önce isteği yakalar ve belirli bir nesneyi döndüremez. Yalnızca boolean veya void dönüş türleri vardır.


Kaynaklar


Beklenen görüşme soruları ve cevapları

Filtre nedir?

Filtre, Dispatcher Servlet'e istek ulaşmadan önce/sonra URL kalıplarına uyan tüm istekler için ek işlemler gerçekleştirme imkânı sağlayan bir özelliktir ve servlet container seviyesinde çalışır.


Filtre ne zaman kullanılır?

Filtrelerde Spring ile ilgili olmaksızın genel olarak işlenmesi gereken işlemleri işleyebilirsiniz. Ayrıca istek parametrelerini doğrularken kullanılır.

Tipik olarak güvenlik ile ilgili genel görevler, tüm istekler için günlük kaydı, görüntü/veri sıkıştırması ve dize kodlaması, ServletRequest özelleştirme işlemleri işlenir.


Interceptor nedir?

Interceptor, Dispatcher Servlet'in denetleyiciyi çağırmasından önce ve sonra istek ve yanıtları referans alabilir veya işleyebilen bir özelliktir ve Spring container seviyesinde çalışır.


Interceptor ne zaman kullanılır?

Interceptor, istemci isteğiyle ilgili genel olarak işlenmesi gereken işlemleri veya doğrulama işlemi sırasında hizmet mantığını çağırmanız gerektiğinde kullanılır.

Tipik olarak, kimlik doğrulama/yetkilendirme gibi genel görevler, API çağrıları için günlük kaydı, denetleyiciye iletilen verilerin işlenmesi işlemleri işlenir.


Filtre ve Interceptor arasındaki farklar nelerdir?

Filtre servlet container seviyesinde çalışır, interceptor ise Spring container seviyesinde çalışır.

Filtre, Dispatcher Servlet'in öncesini ve sonrasını işleyebilirken, interceptor denetleyicinin öncesini ve sonrasını işleyebilir.

Bu nedenle, filtre, Spring ile ilgili olmaksızın genel olarak işlenmesi gereken işlemleri yaparken, interceptor, istemci isteğiyle ilgili genel olarak işlenmesi gereken işlemleri yaparken kullanılır.


Argument Resolver nedir?

Argument Resolver, herhangi bir isteğin denetleyiciye ulaştığında, istekte gelen değerlerden istediğiniz nesneyi dolaylı olarak oluşturmanızı sağlar.


Argument Resolver ne zaman kullanılır?

JWT belirteci ile istekte bulunulduğunda, geçerli bir belirteç olup olmadığını doğrulamalı ve belirteçte depolanan kimliği çıkararak LoginMember adlı nesneyi oluşturmanız gerektiğinde kullanılabilir.


Interceptor ve Argument Resolver arasındaki farklar nelerdir?

Argument Resolver, herhangi bir isteğin denetleyiciye ulaştığında, istekte gelen değerlerden istediğiniz nesneyi döndürür. Öte yandan, interceptor belirli bir nesneyi döndüremez ve interceptor çalıştırıldıktan sonra Argument Resolver çalışır.

제이온
제이온
제이온
제이온
[Spring] @Async kullanımı Spring @Async'yi kullanarak Java eşzamansız işlemlerini kolayca uygulamanın yollarını öğrenin. @Async anotasyonu ile senkron metotları eşzamansız hale getirebilir ve iş parçacığı havuzu ayarlarıyla verimliliği artırabilirsiniz. Future, ListenableFuture ve

25 Nisan 2024

[Java] Yansıma Kavramı ve Kullanım Şekli Yansıma, Java programları çalışırken sınıf bilgilerine erişerek sınıfları manipüle etmeyi sağlayan bir API'dir. Çalışma zamanında sınıflar oluşturulmasını ve alanlara ve yöntemlere erişmeyi sağlar, ancak kapsüllemeyi ihlal edebilir ve performans düşüşüne

25 Nisan 2024

[Nesne] 1. Bölüm: Nesneler, Tasarım Yazılım geliştirmede uygulama teoriden daha önemlidir ve iyi bir tasarım, kodun anlaşılmasını kolaylaştırır ve değişikliklere esnek bir şekilde uyum sağlamasını sağlar. Nesne yönelimli tasarım, işbirliği yapan nesneler arasındaki bağımlılıkların nasıl uyg

28 Nisan 2024

[SI Geliştirici Hikayesi] 12. SI Projelerinde Sık Kullanılan Teknoloji Yığını Güney Kore'deki SI geliştiricileri, genellikle Java tabanlı Spring, Oracle DB, Mybatis, JSP, JavaScript, HTML, CSS gibi teknoloji yığınlarını kullanarak verimli ve istikrarlı BT sistemleri geliştirir ve Eclipse'i geliştirme ortamı olarak kullanırlar. Bu t
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

19 Nisan 2024

Flitter 1.0.0 Yayınlandı: D3'ün Yerini Alacak svg Kütüphanesi Flitter, web geliştiricilerinin çizelgeleri ve diyagramları kolay ve hızlı bir şekilde uygulamalarına yardımcı olan bir veri görselleştirme kütüphanesidir. Bildirici kod yazma yaklaşımı ve gelişmiş düzen hesaplama özellikleri karmaşık veri görselleştirme
Meursyphus
Meursyphus
Meursyphus
Meursyphus
Meursyphus

1 Mayıs 2024

Veri Etiketleme Nedir? Türleri, Avantajları, Dezavantajları Veri etiketleme, bilgisayarların verileri anlamasını sağlayan temel bir süreçtir. Köpek ve kedi resimlerine sırasıyla 'köpek' ve 'kedi' etiketleri eklemek gibi, verilere etiketler ekleyerek bilgisayar öğrenmesini mümkün kılar. Dikdörtgen, nokta, çokgen gi
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

29 Mart 2024

[Metal Malzemeleri Ustalık Sınavı] 34. Dönem Çözümleri Bu belge, malzeme bilimi ve ısıl işlemle ilgili çeşitli konuları ele almaktadır ve soğuk işleme, yorulma dayanımı, yüksek frekanslı sertleştirme, kırılmayan muayene, sertlik, karbonlama, metallerin özellikleri, martensit dönüşümü gibi konulara dair açıkla
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23 Nisan 2024

[Metal Malzemeleri Ustabaşı Uygulaması] 35. Dönem Çözümleri Metal malzemeler mikroskopik yapı incelemesi, ferrit tane büyüklüğü belirleme yöntemi, BCC'nin paketleme faktörü gibi metal malzemelerle ilgili çeşitli terim ve kavramları özetleyen ve açıklayan bir materyaldir. Sementasyon çeliğinin sahip olması gereken
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23 Nisan 2024

[Bilişim alanında olmayanlar için, geliştirici olarak hayatta kalmak] 14. Yeni Başlayan Geliştiricilerin Sıkça Sorduğu Teknoloji Görüşme İçerikleri Özeti Yeni başlayan geliştiriciler için bir teknoloji görüşme hazırlık rehberidir. Ana bellek alanı, veri yapıları, RDBMS ve NoSQL, yordamsal ve nesne yönelimli, geçersiz kılma ve aşırı yükleme, sayfa değiştirme algoritmaları, süreçler ve iş parçacıkları, OSI 7
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 Nisan 2024