亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java Spring攔截器案例詳解

 更新時(shí)間:2021年08月13日 09:55:34   作者:溜了溜了AA  
這篇文章主要介紹了Java Spring攔截器案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

springmvc提供了攔截器,類似于過濾器,他將在我們的請求具體出來之前先做檢查,有權(quán)決定接下來是否繼續(xù),對我們的請求進(jìn)行加工。
攔截器,可以設(shè)計(jì)多個(gè)。

通過實(shí)現(xiàn)handlerunterceptor,這是個(gè)接口

定義了非常重要的三個(gè)方法:

后置處理

前置處理

完成處理

案例一:
通過攔截器實(shí)現(xiàn)方法耗時(shí)統(tǒng)計(jì)與警告

package com.xy.interceptors;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;

/**
* 方法耗時(shí)統(tǒng)計(jì)攔截器
*/
public class MethodTimerInterceptor implements HandlerInterceptor {

    private static final Logger LOGGER=Logger.getLogger(MethodTimerInterceptor.class);

    //前置功能,  開始到結(jié)束,兩個(gè)點(diǎn)減法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //定義開始時(shí)間
        long start = System.currentTimeMillis();
        //2.將其存到請求域當(dāng)中
        request.setAttribute("start",start);
        //記錄請求日志
        LOGGER.info(request.getRequestURI()+",請求到達(dá)");
        //3,返回true,才會(huì)找下一個(gè)攔截器,如果沒有下一個(gè)攔截器,則去Controller
        return true;
    }


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        //1,取出start
        long start = (long) request.getAttribute("start");


        //2,得到end
        long end =System.currentTimeMillis();


        //3,記錄耗時(shí)
        long spendTime = end-start;
        if (spendTime>2000){
            LOGGER.warn("方法耗時(shí)嚴(yán)重,請及時(shí)處理,耗時(shí):"+spendTime);
        }else {
            LOGGER.info("方法耗時(shí)"+spendTime+"毫秒,正常");
        }
    }


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {


    }
}

springmvc的配置

<!--攔截器的配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--


        -->
        <mvc:mapping path="/**/*"/>
        <bean class="com.xy.interceptors.MethodTimerInterceptor">


        </bean>
    </mvc:interceptor>
</mvc:interceptors>

案例二:會(huì)話攔截器

package com.xy.interceptors;


import com.xy.pojo.User;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class SessionInterceptor implements HandlerInterceptor {


    private static final Logger LOGGER=Logger.getLogger(SessionInterceptor.class);


    //檢查當(dāng)前會(huì)話是否有User,如果有則放行,沒有則攔截
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object user = request.getSession().getAttribute("SESSION_USER");


        if (user==null){
            LOGGER.warn("您不具備權(quán)限,請先登錄");
            return false;
        }


        if(user instanceof User){
            //再去數(shù)據(jù)庫檢查其身份對不對,是否凍結(jié)。。。
            User user1 = (User) user;
            user1.setPwd(null);
            request.getSession().setAttribute("SESSION_USER",user1);
            LOGGER.info(user1.getName()+"處于登錄狀態(tài),可以執(zhí)行操作");
            return true;
        }else {
            LOGGER.warn("請先登錄");
            return false;
        }
    }


    @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 {


    }
}

springMvc配置

<!--攔截器的配置-->
<mvc:interceptors>

    <!--只想攔截/user2/**/*
        還需要開放登錄權(quán)限
    -->
    <mvc:interceptor>
        <mvc:mapping path="/user2/**/*"/>
        <!--排除登錄的URI-->
        <mvc:exclude-mapping path="/user2/login"></mvc:exclude-mapping>
        <bean class="com.xy.interceptors.SessionInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

將其配置在mvc:interceptors節(jié)點(diǎn)之下即可。

攔截器執(zhí)行順序問題

如果有N個(gè)攔截器,并且都能攔截到某個(gè)URI的時(shí)候,執(zhí)行順序問題,

在springmvc當(dāng)中攔截器定義的順序是有關(guān)系的。配置在前面的優(yōu)先攔截,按照順序來

攔截器與過濾器的比較

相似

1,都有優(yōu)先處理請求的權(quán)利,都可以決定是否將請求轉(zhuǎn)移到請求的實(shí)際處理的控制器處。
2,都可以對請求或者會(huì)話當(dāng)中的數(shù)據(jù)進(jìn)行加工。
不同

1, 攔截器可以做前置處理也可以做后置處理,還可以進(jìn)行完成處理,控制的 更加細(xì)致,而過濾器只負(fù)責(zé)前面的過濾行為而已。
2, 過濾器優(yōu)先執(zhí)行,還是攔截器優(yōu)先呢?----------過濾器優(yōu)先。
3,過濾器是servlet規(guī)范里面的組件。
4, 攔截器都是框架自己而外添加的組件。

到此這篇關(guān)于Java Spring攔截器案例詳解的文章就介紹到這了,更多相關(guān)Java Spring攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java的Spring框架中實(shí)現(xiàn)發(fā)送郵件功能的核心代碼示例

    Java的Spring框架中實(shí)現(xiàn)發(fā)送郵件功能的核心代碼示例

    這篇文章主要介紹了Java的Spring框架中實(shí)現(xiàn)發(fā)送郵件功能的核心代碼示例,包括發(fā)送帶附件的郵件功能的實(shí)現(xiàn),需要的朋友可以參考下
    2016-03-03
  • java連接postgresql數(shù)據(jù)庫代碼及maven配置方式

    java連接postgresql數(shù)據(jù)庫代碼及maven配置方式

    這篇文章主要介紹了java連接postgresql數(shù)據(jù)庫代碼及maven配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • GraalVm的反射配置輔助工具agentlib配置及使用

    GraalVm的反射配置輔助工具agentlib配置及使用

    這篇文章主要為大家介紹了GraalVm的反射配置輔助工具agentlib的配置文件及使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • Java簡單實(shí)現(xiàn)銀行ATM系統(tǒng)

    Java簡單實(shí)現(xiàn)銀行ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java簡單實(shí)現(xiàn)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot實(shí)現(xiàn)AOP切面的三種方式

    SpringBoot實(shí)現(xiàn)AOP切面的三種方式

    Spring,SpringBoot框架憑借多種高效機(jī)制,顯著增強(qiáng)了代碼的功能性,并實(shí)現(xiàn)了切面編程(AOP)的精髓,其核心亮點(diǎn)之一,是運(yùn)用動(dòng)態(tài)代理技術(shù),無需觸動(dòng)源代碼即可在Bean的運(yùn)行時(shí)為其動(dòng)態(tài)織入額外功能,本文給大家介紹了SpringBoot通過3種方式實(shí)現(xiàn)AOP切面,需要的朋友可以參考下
    2024-08-08
  • 快速解決SpringMVC @RequestBody 用map接收請求參數(shù)的問題

    快速解決SpringMVC @RequestBody 用map接收請求參數(shù)的問題

    今天小編就為大家分享快速解決SpringMVC @RequestBody 用map接收請求參數(shù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    生成隨機(jī)數(shù)是我們?nèi)粘i_發(fā)經(jīng)常會(huì)遇到的一個(gè)功能,這篇文章主要給大家介紹了關(guān)于Java中生成隨機(jī)數(shù)的4種方式與區(qū)別、應(yīng)用場景的相關(guān)資料,4個(gè)方式分別是Random、ThreadLocalRandom、SecureRandom以及Math,需要的朋友可以參考下
    2021-06-06
  • SpringBoot實(shí)現(xiàn)前端驗(yàn)證碼圖片生成和校驗(yàn)

    SpringBoot實(shí)現(xiàn)前端驗(yàn)證碼圖片生成和校驗(yàn)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)前端驗(yàn)證碼圖片生成和校驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • SpringBoot整合freemarker的講解

    SpringBoot整合freemarker的講解

    今天小編就為大家分享一篇關(guān)于SpringBoot整合freemarker的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • IDEA配置Maven教程的超詳細(xì)講解版

    IDEA配置Maven教程的超詳細(xì)講解版

    IntelliJ IDEA是當(dāng)前最流行的Java IDE(集成開發(fā)環(huán)境)之一,也是業(yè)界公認(rèn)最好用的Java開發(fā)工具之一,這篇文章主要給大家介紹了關(guān)于IDEA配置Maven教程的超詳細(xì)講解版,需要的朋友可以參考下
    2023-11-11

最新評論