Java Spring Boot VS .NetCore (二)實現一個過濾器Filter


 

Java Spring Boot VS .NetCore (一)來一個簡單的 Hello World

Java Spring Boot VS .NetCore (二)實現一個過濾器Filter

Java Spring Boot VS .NetCore (三)Ioc容器處理

Java Spring Boot VS .NetCore (四)數據庫操作 Spring Data JPA vs EFCore

Java Spring Boot VS .NetCore (五)MyBatis vs EFCore

Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml

Java Spring Boot VS .NetCore (七) 配置文件

Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute

Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security

Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor

Java Spring Boot VS .NetCore (十一)自定義標簽 Java Tag Freemarker VS .NetCore Tag TagHelper

Java中實現過濾器是集成實現接口Filter 然后去添加相關的注冊 FilterRegistration,下面就來對比下.NetCore 中的 Filter 來一次用法上的比較

說到Java中的Filter 這里就需要說明下 @Configuration @Bean 這兩個注解

@Bean  給@Bean標注的方法產生一個Bean方法並交給Spring Ioc 容器管理的方法,這些@Bean標注的方法會被AnnotationConfigApplicationContext、AnnotationConfigWebApplicationContext 處理后最后添加到Spring 容器中,  我把它理解為 .NetCore 中的 注入DI 吧 ,使用 IServiceCollection 添加服務,注入后也是交給  Ioc 容器中的 交給 Microsoft.Extensions.DependencyInjection

@Configuration 這個標注是用來干什么的呢?用於定義配置類,里面需要包含被 @Bean注解標注的方法

下面上一些代碼:

Java Filter 處理 

@Configuration
public class WebConfig {
    @Bean
    public RemoteIpFilter remoteIpFilter()
    {
        return  new RemoteIpFilter();
    }
    @Bean
    public FilterRegistrationBean LYMRegistrationBean()
    {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new LYMFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("myname", "這是我寫的參數值");
        registration.setName("LYMFilter");
        registration.setOrder(1);
        return registration;
    }
    public  class  LYMFilter implements Filter{


        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("這是LYMFilter的初始化:"+filterConfig.getFilterName());
            System.out.println("這是LYMFilter的初始化:"+filterConfig.getInitParameter("myname"));
        }

        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            System.out.println("這是Ip攔截器,攔截地址 :"+request.getRequestURI());
            filterChain.doFilter(servletRequest, servletResponse);
        }

        @Override
        public void destroy() {
            System.out.println("LYMFilter被銷毀");
        }
    }

Java中這里用的 RemoteFilter  ,還有其他的過濾器,實現Filter接口的時候其實就可以看到 Filter有很多 來之不懂包里面的接口 ,這里實現的是Servlet

注冊好Filter指定相關參數  如:設置名稱  設置參數  指定過濾的地址 以及當前過濾器的一個順序,這里順序個人覺得給 .NetCore中的中間件 Middleware 順序一個個處理,只是.NetCore中中間件執行的順序是根據ConfigServices中的上下代碼順序來執行的 

.NetCore 中 過濾器有幾種基本的,這里我用授權過濾器來描述 IAuthorizationFilter ,然后在 IServiceCollection 添加好注冊服務 

public class LYMFilter : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
           // do something
        }
    }
services.AddMvc(options=>options.Filters.Add(new LYMFilter()));

.NetCore中的執行效果就不演示了,下面我們看下Java中的處理結果

我們輸入之前的helloworld地址 可以看到如下輸出

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM