色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

通過實例解析java過濾器和攔截器的區(qū)別

瀏覽:4日期:2022-09-03 14:43:21

區(qū)別

1.使用范圍和規(guī)范不同

filter是servlet規(guī)范規(guī)定的,只能用在web程序中.

攔截器即可以用在web程序中, 也可以用于application, swing程序中, 是Spring容器內的, 是Spring框架支持的

2.觸發(fā)時機不同

順序: Filter-->Servlet-->Interceptor-->Controller

過濾器是在請求進入容器后,但請求進入servlet之前進行預處理的。請求結束返回也是,是在servlet處理完后,返回給前端之前過濾器處理。 攔截器是方法到達Controller層之前生效的

3.過濾器的實現(xiàn)基于回調函數(shù)。而攔截器(代理模式)的實現(xiàn)基于反射,代理分靜態(tài)代理和動態(tài)代理,動態(tài)代理是攔截器的簡單實現(xiàn)。

何時使用攔截器?何時使用過濾器?

如果是非spring項目,那么攔截器不能用,只能使用過濾器。 如果是處理controller前后,既可以使用攔截器也可以使用過濾器。 如果是處理dispaterServlet前后,只能使用過濾器。

4.在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。

5.攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。

6.攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。

7.攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,在攔截器里注入一個service,可以調用業(yè)務邏輯。

SpringBoot使用過濾器

兩種方式:

1、使用spring boot提供的FilterRegistrationBean注冊Filter

2、使用原生servlet注解定義Filter

兩種方式的本質都是一樣的,都是去FilterRegistrationBean注冊自定義Filter

封裝Filter

package com.theeternity.common.baseFilter;import javax.servlet.Filter;/** * @program: ApiBoot * @description: 封裝Filter * @author: TheEternity Zhang * @create: 2019-02-17 13:08 */public interface MappingFilter extends Filter { String[] addUrlPatterns(); int order();}

自定義Filter

package com.theeternity.beans.filterConfig;import com.theeternity.common.baseFilter.MappingFilter;import lombok.extern.slf4j.Slf4j;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.servlet.*;import javax.servlet.FilterConfig;import java.io.IOException;/** * @program: ApiBoot * @description: 權限過濾器 * @author: TheEternity Zhang * @create: 2019-02-17 13:14 */public class AuthFilter implements MappingFilter { @Override public String[] addUrlPatterns() { return new String[]{'/*'}; } @Override public int order() { return 0; } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { }}

注冊過濾器

package com.theeternity.beans.filterConfig;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @program: ApiBoot * @description: 注冊過濾器 * @author: TheEternity Zhang * @create: 2019-02-17 13:10 */@Configurationpublic class FilterConfig { @Bean public FilterRegistrationBean registFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); AuthFilter authFilter=new AuthFilter(); registration.setFilter(authFilter); registration.addUrlPatterns(authFilter.addUrlPatterns()); registration.setOrder(authFilter.order()); registration.setName('AuthFilter'); return registration; }}

SpringBoot使用攔截器

封裝Interceptor

package com.theeternity.common.baseInterceptor;import org.springframework.web.servlet.HandlerInterceptor;/** * @program: ApiBoot * @description: 封裝Interceptor * @author: TheEternity Zhang * @create: 2019-02-15 17:49 */public interface MappingInterceptor extends HandlerInterceptor { String[] addPathPatterns(); String[] excludePathPatterns(); int order();}

自定義Interceptor

package com.theeternity.beans.interceptorConfig;import com.theeternity.common.baseInterceptor.MappingInterceptor;import org.springframework.stereotype.Component;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @program: BoxApi * @description: 跨域攔截器 * @author: tonyzhang * @create: 2018-12-21 14:44 */@Componentpublic class CrossOriginInterceptor implements MappingInterceptor { @Override public String[] addPathPatterns() { return new String[]{'/**'}; } @Override public String[] excludePathPatterns() { return new String[0]; } @Override public int order() { return 0; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.info('允許的頭信息'+request.getHeader('Origin')); response.setHeader('Access-Control-Allow-Origin', '*'); response.setHeader('Access-Control-Allow-Methods', '*'); response.setHeader('Access-Control-Max-Age', '3600'); response.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); //是否允許瀏覽器攜帶用戶身份信息(cookie) response.setHeader('Access-Control-Allow-Credentials','true'); 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 { }}

注冊Interceptor

package com.theeternity.beans.interceptorConfig;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/** * @program: ApiBoot * @description: 攔截器注冊 * @author: TheEternity Zhang * @create: 2019-02-15 17:55 */@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Autowired private CrossOriginInterceptor crossOriginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(crossOriginInterceptor).addPathPatterns(crossOriginInterceptor.addPathPatterns()); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲免费国产 | 成人在线欧美 | 午夜影院黄色 | 色射网| 国产欧美精品一区二区三区 | 中文字幕s级优女区 | 国产l精品国产亚洲区久久 国产tv在线 | 日本久久久久久久 | 成人国产精品视频 | 永久免费观看午夜视频在线 | 日韩欧美国产一区二区三区 | 欧美做爰孕妇群 | 嫩草一区二区三区四区乱码 | 欧美一区二区在线 | 国产在线观看成人免费视频 | 日本网址在线观看 | 一级欧美一级日韩片 | 欧美成人亚洲高清在线观看 | 美女张开腿让我桶 | 在线人成精品免费视频 | 亚洲日本高清成人aⅴ片 | 天堂在线亚洲 | 91精品成人福利在线播放 | 欧美在线 | 亚洲 | 久久免费影院 | 午夜不卡在线 | 国产三级视频网站 | 久久久久依人综合影院 | 国产精品高清视亚洲一区二区 | 青草久久网 | 正在播放亚洲一区 | 99久久免费看国产精品 | 一区二区三区日韩 | 欧美真人视频一级毛片 | 欧美一级毛片欧美一级无片 | 欧美日一区 | 成年人视频在线观看免费 | 国产精品区在线12p 国产精品人成 | 欧美综合另类 | 黄网在线视频 | 国产二区三区 |