Java Spring Boot VS .NetCore (二)实现一个过滤器Filter

 

Java Spring Boot VS .NetCore (一)来一个简单的 Hello Worldhtml

Java Spring Boot VS .NetCore (二)实现一个过滤器Filter数据库

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

Java Spring Boot VS .NetCore (四)数据库操做 Spring Data JPA vs EFCorespa

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

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

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

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

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

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

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地址 能够看到以下输出

 

相关文章
相关标签/搜索