亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

springboot(五)——springboot中的攔截器和過(guò)濾器小結(jié)

Magicer / 2203人閱讀

摘要:而攔截器代理模式的實(shí)現(xiàn)基于反射,代理又分靜態(tài)代理和動(dòng)態(tài)代理,動(dòng)態(tài)代理是攔截器的簡(jiǎn)單實(shí)現(xiàn)。如果是處理前后,既可以使用攔截器也可以使用過(guò)濾器,如果都使用了,注意前后順序。

前言

關(guān)于過(guò)濾器Filter和攔截器Interceptor,大家都不會(huì)陌生,從一開(kāi)始的servelet,到springmvc,再到現(xiàn)在的springboot,都有接觸到,記得剛接觸的時(shí)候,會(huì)容易弄混淆,想寫(xiě)這篇文章做個(gè)小的總結(jié)

攔截器和過(guò)濾器的異同

相同點(diǎn)

都是aop編程思想的體現(xiàn),可以在程序執(zhí)行前后做一些操作,如權(quán)限操作,日志記錄等

不同點(diǎn):

Filter是Servlet規(guī)范中定義的,攔截器是Spring框架中的

觸發(fā)時(shí)機(jī)不一樣,過(guò)濾器是在請(qǐng)求進(jìn)入容器后,但請(qǐng)求進(jìn)入servlet之前進(jìn)行預(yù)處理的

攔截器可以獲取IOC容器中的各個(gè)bean,而過(guò)濾器就不行,攔截器歸Spring管理

Springboot實(shí)現(xiàn)過(guò)濾器和攔截器

第一步:定義Filter

@Slf4j
public class TestFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        log.info("TestFilter filter。。。。。。。。");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

第二步:注入springboot容器當(dāng)中

@Configuration
public class FilterConfig {

    @Bean
    Filter testFilter(){
        return new TestFilter();
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean1(){
        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter((TestFilter) testFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        //filterRegistrationBean.setOrder();多個(gè)filter的時(shí)候order的數(shù)值越小 則優(yōu)先級(jí)越高
        return filterRegistrationBean;
    }
}

第三步:定義攔截器

@Slf4j
@Service(value = "testInterceptor")
public class TestInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("TestInterceptor preHandle....");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        log.info("TestInterceptor postHandle....");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        log.info("TestInterceptor afterCompletion....");
    }

}

第四步:加入springboot容器

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Autowired
    TestInterceptor testInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(testInterceptor)
                .addPathPatterns("/api/**");
    }
}

注意:這邊用的springboot是2.0.x,采取的是直接實(shí)現(xiàn)WebMvcConfigurer,因?yàn)閃ebMvcConfigurerAdapter被標(biāo)識(shí)了@Deprecated,就沒(méi)有繼承WebMvcConfigurerAdapter了

/** @deprecated */
@Deprecated
public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
    public WebMvcConfigurerAdapter() {
    }
}

第五步:還是啟動(dòng)之前的controller

@RestController
@RequestMapping("/api/test")
@Slf4j
public class TestController {

    @RequestMapping(value = "/hello")
    public String test() {
        log.info("test hello.............");
        return "SUCCESS";
    }

看到打印結(jié)果如下

2019-04-27/12:01:04.603||||||||^_^|[http-nio-8088-exec-1] INFO  com.stone.zplxjj.filter.TestFilter 22 - TestFilter filter。。。。。。。。
2019-04-27/12:01:04.612||||||||^_^|[http-nio-8088-exec-1] INFO  com.stone.zplxjj.interceptor.TestInterceptor 26 - TestInterceptor preHandle....
2019-04-27/12:01:04.634||||||||^_^|[http-nio-8088-exec-1] INFO  com.stone.zplxjj.interceptor.TestInterceptor 32 - TestInterceptor postHandle....
2019-04-27/12:01:04.634||||||||^_^|[http-nio-8088-exec-1] INFO  com.stone.zplxjj.interceptor.TestInterceptor 37 - TestInterceptor afterCompletion....
小結(jié)

過(guò)濾器的實(shí)現(xiàn)基于回調(diào)函數(shù)。而攔截器(代理模式)的實(shí)現(xiàn)基于反射,代理又分靜態(tài)代理和動(dòng)態(tài)代理,動(dòng)態(tài)代理是攔截器的簡(jiǎn)單實(shí)現(xiàn)。那何時(shí)使用攔截器?何時(shí)使用過(guò)濾器?

如果是非spring項(xiàng)目,那么攔截器不能用,只能使用過(guò)濾器,這里說(shuō)的攔截器是基于spring的攔截器。

如果是處理controller前后,既可以使用攔截器也可以使用過(guò)濾器,如果都使用了,注意前后順序。

如果是處理dispaterServlet前后,只能使用過(guò)濾器。

更多文章可以關(guān)注公眾號(hào):stonezplxjj和個(gè)人博客:http://www.zplxjj.com

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74327.html

相關(guān)文章

  • Resultful API的攔截過(guò)濾器——Filter)

    摘要:四過(guò)濾器攔截器切面起作用的順序先是過(guò)濾器起作用然后攔截器起作用然后切面起作用最后進(jìn)入方法中五當(dāng)控制層即層的方法拋異常時(shí),過(guò)濾器攔截器切面拋異常的順序先是切面如果使用自定義異常再進(jìn)入這個(gè)處理異常類(lèi)然后攔截器然后過(guò)濾器如果都沒(méi)處理,最后到 ...

    ckllj 評(píng)論0 收藏0
  • Resultful API的攔截(切片Aspect)

    摘要:目錄一的攔截三種方式二切片的演示示例項(xiàng)目三切片特點(diǎn)四過(guò)濾器攔截器切面起作用的順序五當(dāng)控制層即層的方法拋異常時(shí),過(guò)濾器攔截器切面拋異常的順序一的攔截三種方式過(guò)濾器攔截器切片二切片的演示示例項(xiàng)目自定義一個(gè)名稱(chēng)為的切片,代碼 ...

    huaixiaoz 評(píng)論0 收藏0
  • SpringBoot基礎(chǔ)篇AOP之基本使用姿勢(shì)小結(jié)

    摘要:通知和切點(diǎn)共同定義了關(guān)于切面的全部?jī)?nèi)容,它是什么時(shí)候,在何時(shí)和何處完成功能引入允許我們向現(xiàn)有的類(lèi)添加新的方法或者屬性組裝方面來(lái)創(chuàng)建一個(gè)被通知對(duì)象。這可以在編譯時(shí)完成例如使用編譯器,也可以在運(yùn)行時(shí)完成。和其他純框架一樣,在運(yùn)行時(shí)完成織入。 原文:190301-SpringBoot基礎(chǔ)篇AOP之基本使用姿勢(shì)小結(jié) 一般來(lái)講,談到Spring的特性,繞不過(guò)去的就是DI(依賴(lài)注入)和AOP(切...

    timger 評(píng)論0 收藏0
  • 分享筆記:SpringBoot三種攔截服務(wù)【Filter,Interceptor,Aspect】

    摘要:攔截服務(wù)一使用第三方過(guò)濾器直接加入項(xiàng)目攔截服務(wù)二使用自定義攔截器攔截服務(wù)三使用切片完結(jié) Spring攔截服務(wù)【一】(SpringBoot使用第三方過(guò)濾器Filter直接加入項(xiàng)目) Spring攔截服務(wù)【二】(SpringBoot使用自定義攔截器Interceptor) Spring攔截服務(wù)【三】(SpringBoot使用切片Aspect)【完結(jié)】

    qujian 評(píng)論0 收藏0
  • SpringBoot

    摘要:基于,支持后面的版本二基本使用網(wǎng)頁(yè)生成訪(fǎng)問(wèn)生成項(xiàng)目并下載。這里的配置項(xiàng)可以自動(dòng)提示。數(shù)據(jù)配置文件配置四整合映射跟之前一樣注冊(cè)注冊(cè)攔截器五整合基本整合使用映射文件映射文件和注解同時(shí)存在注解引入配置文件增加事務(wù)六自動(dòng)配置自動(dòng)原理配置項(xiàng) 一、SpringBoot簡(jiǎn)介 1. 使用SSM開(kāi)發(fā)項(xiàng)目的時(shí)候有什么不足之處 創(chuàng)建ssm項(xiàng)目比較麻煩 配置比較麻煩 依賴(lài)的配置比較多比較麻煩 手動(dòng)集成第三方...

    mykurisu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Magicer

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<