国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別

詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別

2021-05-26 13:11tom和cat Java教程

今天小編就為大家分享一篇詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

前言

springmvc中有兩種很普遍的aop實(shí)現(xiàn):

1.過濾器(filter)

2.攔截器(interceptor)

本篇面對的是一些剛接觸springboot的人群

所以主要講解filter和interceptor的簡單實(shí)現(xiàn)和它們之間到底有什么區(qū)別

(一些復(fù)雜的功能我會之后發(fā)出文章,請記得關(guān)注)

filter的簡單實(shí)現(xiàn)

字面意思:過濾器就是過濾的作用,在web開發(fā)中過濾一些我們指定的url

那么它能幫我們過濾什么呢?

那功能可就多了:

比如過攔截掉我們不需要的接口請求

修改請求(request)和響應(yīng)(response)內(nèi)容

完成cors跨域請求等等

現(xiàn)在我們來實(shí)現(xiàn)一個(gè)簡單的過濾器:

可以新建一個(gè)filter包,隨著項(xiàng)目的擴(kuò)大過濾器會越來越多

在這里我新建了一個(gè)testfilter類,實(shí)現(xiàn)filter接口

?
1
2
3
@component
@webfilter(urlpatterns = "/blogs",filtername = "blostest")
public class testfilter implements filter{}

我們一步步來

1.@component就是把這個(gè)類注入到ioc容器中

2.@webfilter(urlpatterns = "/blogs",filtername = "blostest")說明這是一個(gè)web過濾器,它攔截的url為/blogs,過濾器名字為blogstest

下面貼出實(shí)現(xiàn)接口之后的三個(gè)重構(gòu)方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@override
  public void init(filterconfig filterconfig) throws servletexception {
 
  }
 
  @override
  public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception {
    httpservletrequest request= (httpservletrequest) servletrequest;
    httpservletresponse response = (httpservletresponse) servletresponse;
    system.out.printf("過濾器實(shí)現(xiàn)");
    filterchain.dofilter(request,response);
  }
 
  @override
  public void destroy() {
 
  }

初始化(init)和摧毀(destroy)方法一般不會用到,具體使用看下源碼便知

dofilter()是過濾器的核心

注意:在實(shí)現(xiàn)接口方法之后,我們要轉(zhuǎn)換request和response類型至httpservlet,否則接下去的操作可能會報(bào)錯(cuò)。

如果過濾通過,執(zhí)行filterchain.dofilter(request,response);

說明這個(gè)url已經(jīng)經(jīng)過了我們的filter

可以看到,只需要一個(gè)類我們就實(shí)現(xiàn)了一個(gè)簡單的過濾器

當(dāng)然可以不用注解的方式,配置啟動類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
//過濾器
  @bean
  public filterregistrationbean filterregistrationbean(){
    filterregistrationbean filterregistrationbean = new filterregistrationbean();
    list<string> urlpatterns = new arraylist<string>();
 
    testfilter testfilter = new testfilter();  //new過濾器
    urlpatterns.add("/blogs");   //指定需要過濾的url
    filterregistrationbean.setfilter(testfilter);    //set
    filterregistrationbean.seturlpatterns(urlpatterns);   //set
 
    return filterregistrationbean;
  }

這也是可以的,本人其實(shí)還是比較推薦這種方式添加過濾器

interceptor的簡單實(shí)現(xiàn)

攔截器的實(shí)現(xiàn)比過濾器稍微復(fù)雜一點(diǎn)

我們同樣可以新建一個(gè)interceptor包

在里面新建一個(gè)名為myinterceptor的類

?
1
public class myinterceptor implements handlerinterceptor {}

這個(gè)類實(shí)現(xiàn)了handleinterceptor接口

直接貼類代碼,我會在代碼中注釋功能

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class myinterceptor implements handlerinterceptor {
  //在請求處理之前進(jìn)行調(diào)用(controller方法調(diào)用之前
  @override
  public boolean prehandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o) throws exception {
    system.out.printf("prehandle被調(diào)用");
    return true//如果false,停止流程,api被攔截
  }
 
  //請求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(controller方法調(diào)用之后)
  @override
  public void posthandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, modelandview modelandview) throws exception {
    system.out.println("posthandle被調(diào)用");
  }
 
  //在整個(gè)請求結(jié)束之后被調(diào)用,也就是在dispatcherservlet 渲染了對應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)
  @override
  public void aftercompletion(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, exception e) throws exception {
    system.out.println("aftercompletion被調(diào)用");
  }
}

它依次實(shí)現(xiàn)了三個(gè)方法

相比過濾器,攔截器還需要在springmvc中注入

所以我們打開啟動類,寫入以下代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class warapplication {
 
  public static void main(string[] args) {
    springapplication.run(warapplication.class, args);
  }
 
  //mvc控制器
  //@configuration
  static class webmvcconfigurer extends webmvcconfigureradapter{
    //增加攔截器
    public void addinterceptors(interceptorregistry registry){
      registry.addinterceptor(new myinterceptor())  //指定攔截器類
          .addpathpatterns("/handles");    //指定該類攔截的url
    }
  }
}

這里我在/handles這個(gè)url中進(jìn)行攔截

代碼寫完了,來看下結(jié)果

當(dāng)進(jìn)入指定url時(shí),我們執(zhí)行到了攔截器

接下來就可以根據(jù)需求去使用攔截器了

區(qū)別

過濾器和攔截器非常相似,但是它們有很大的區(qū)別

最簡單明了的區(qū)別就是過濾器可以修改request,而攔截器不能

過濾器需要在servlet容器中實(shí)現(xiàn),攔截器可以適用于javaee,javase等各種環(huán)境

攔截器可以調(diào)用ioc容器中的各種依賴,而過濾器不能

過濾器只能在請求的前后使用,而攔截器可以詳細(xì)到每個(gè)方法

區(qū)別很多,大家可以去查下

總的來說

過濾器就是篩選出你要的東西,比如requeset中你要的那部分

攔截器在做安全方面用的比較多,比如終止一些流程

以上這篇詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/sinat_32023305/article/details/79926588

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 手机在线观看av | 亚洲欧美在线精品 | 久久人成 | 国产精品免费观看 | 亚洲国产精品久久 | 日韩欧美视频一区 | 国内精品一区二区 | 亚洲电影二区 | 求av网址 | 99精品免费视频 | 国产综合久久 | 欧美一级内谢 | 午夜精品久久久久久久久久久久 | 综合伊人久久 | 久久狠狠| 国产成人在线播放 | 欧美精品99 | 欧美中文字幕 | 香蕉影院在线观看 | 99精品国产高清一区二区麻豆 | 91大神xh98hx在线播放 | 亚洲一区二区三区免费观看 | 一久久久 | 亚洲91精品 | 中文字幕亚洲综合久久久软件 | 四季久久免费一区二区三区四区 | 精品久久久一区 | 日韩欧美专区 | 免费污视频在线 | 国产高清美女一级a毛片久久 | 免费观看av电影 | 日韩在线观看一区 | 不卡的免费av | 欧美一级二级视频 | av毛片免费 | 久久久久久久久久久九 | 精品久久久久久久久久 | 欧美日韩综合精品 | 欧美一级视频在线观看 | 国产成人精品一区二区三区四区 | 在线免费成人 |