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註解標註的方法
下面上一些代碼:
@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中的上下代碼順序來執行的
public class LYMFilter : IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { // do something } }
services.AddMvc(options=>options.Filters.Add(new LYMFilter()));
.NetCore中的執行效果就不演示了,下面咱們看下Java中的處理結果
咱們輸入以前的helloworld地址 能夠看到以下輸出