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 处理
@Configurationpublic classWebConfig {
@BeanpublicRemoteIpFilter remoteIpFilter()
{return newRemoteIpFilter();
}
@BeanpublicFilterRegistrationBean LYMRegistrationBean()
{
FilterRegistrationBean registration= newFilterRegistrationBean();
registration.setFilter(newLYMFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("myname", "这是我写的参数值");
registration.setName("LYMFilter");
registration.setOrder(1);returnregistration;
}public class LYMFilter implementsFilter{
@Overridepublic void init(FilterConfig filterConfig) throwsServletException {
System.out.println("这是LYMFilter的初始化:"+filterConfig.getFilterName());
System.out.println("这是LYMFilter的初始化:"+filterConfig.getInitParameter("myname"));
}
@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throwsIOException, ServletException {
HttpServletRequest request=(HttpServletRequest) servletRequest;
System.out.println("这是Ip拦截器,拦截地址 :"+request.getRequestURI());
filterChain.doFilter(servletRequest, servletResponse);
}
@Overridepublic voiddestroy() {
System.out.println("LYMFilter被销毁");
}
}
Java中这里用的 RemoteFilter ,还有其他的过滤器,实现Filter接口的时候其实就可以看到 Filter有很多 来之不懂包里面的接口 ,这里实现的是Servlet
注册好Filter指定相关参数 如:设置名称 设置参数 指定过滤的地址 以及当前过滤器的一个顺序,这里顺序个人觉得给 .NetCore中的中间件 Middleware 顺序一个个处理,只是.NetCore中中间件执行的顺序是根据ConfigServices中的上下代码顺序来执行的
.NetCore 中 过滤器有几种基本的,这里我用授权过滤器来描述 IAuthorizationFilter ,然后在 IServiceCollection 添加好注册服务
public classLYMFilter : IAuthorizationFilter
{public voidOnAuthorization(AuthorizationFilterContext context)
{//do something
}
}
services.AddMvc(options=>options.Filters.Add(new LYMFilter()));
.NetCore中的执行效果就不演示了,下面我们看下Java中的处理结果
我们输入之前的helloworld地址 可以看到如下输出