最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

零基礎(chǔ)入門SpringMVC攔截器的配置與使用

 更新時(shí)間:2022年04月27日 09:58:00   作者:羨羨ˇ  
Spring?MVC?的攔截器(Interceptor)與?Java?Servlet?的過濾器(Filter)類似,它主要用于攔截用戶的請(qǐng)求并做相應(yīng)的處理,通常應(yīng)用在權(quán)限驗(yàn)證、記錄請(qǐng)求信息的日志、判斷用戶是否登錄等功能上。本文將代碼演示和文字描述詳解攔截器的原理與使用

 在SpringMVC中 我們說到了攔截器 , 它會(huì)在映射處理器(HandleMapping)執(zhí)行時(shí)檢查我們
訪問的地址是否配置攔截器 , 在攔截器中實(shí)現(xiàn)一些功能

       SpringMVC 定義了攔截器接口 HandlerInterceptor該接口中定義了三個(gè)方法,這三個(gè)方法的調(diào)用時(shí)在 SpringMVC 框架內(nèi)部完成的, 調(diào)用這個(gè)三個(gè)方法的時(shí)候,其參數(shù)的值也是從框架內(nèi)部傳遞進(jìn)來的。

首先我們來看第一個(gè)方法 : boolean preHandle()

      預(yù)處理方法,實(shí)現(xiàn)處理器(Controller層, 控制器)方法的預(yù)處理,就是在處理器方法執(zhí)行之前這個(gè)方法會(huì)被行,相當(dāng)于攔截了處理器方法,框架會(huì)傳遞請(qǐng)求和響應(yīng)對(duì)象給該方法,第三個(gè)參數(shù)為被攔截的處理器方法。如果 preHandle 方法返回 true 表示繼續(xù)流程(如調(diào)用下一個(gè)攔截器或處理器方法),返回 false 表示流程中斷,不會(huì)繼續(xù)調(diào)用其他的攔截器或處理器方法,此時(shí)我們需要通過 response 來產(chǎn)生響應(yīng);

         意思就是說呢 , 當(dāng)請(qǐng)求到達(dá)我們控制層方法時(shí), 會(huì)先進(jìn)入這個(gè)方法中, 根據(jù)preHandle() 方法的

返回結(jié)果(true 和 false) 來決定下一步如何執(zhí)行

      后兩個(gè)方法 : void postHandle()     afterCompletion()

      首先第一個(gè)方法是控制層方法執(zhí)行后會(huì)執(zhí)行, 第二個(gè)方法時(shí)整個(gè)請(qǐng)求結(jié)束后執(zhí)行, 因?yàn)榘姹驹? 這兩個(gè)方法的使用頻率較低, 所以這里我們做一個(gè)了解即可

      接著我們?nèi)ゴ罱ㄒ粋€(gè)攔截器看看到底是怎么一回事

//自己編寫一個(gè)類PreInterceptor 實(shí)現(xiàn) HandlerInterceptor接口 , 重寫preHandle方法
public class PreInterceptor implements HandlerInterceptor {
    //此方法返回true ,請(qǐng)求才能順利到達(dá)相應(yīng)的處理方法中,否則會(huì)被攔截
    @Override
    public boolean preHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler) throws Exception {
        //第三個(gè)參數(shù)為目標(biāo)控制器對(duì)象
        HttpSession session= request.getSession();
        //判斷信息是否有效
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin==null){
            response.getWriter().print(202);
            return false;
        }else {
            return true;
        }
    }
}

      接著需要去配置文件中配置攔截器

<!--配置攔截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--所有請(qǐng)求都進(jìn)入攔截器-->
        <mvc:mapping path="/**"/>
        <!--指定哪些請(qǐng)求不進(jìn)入攔截器-->
        <mvc:exclude-mapping path="/login/login"/>
        <mvc:exclude-mapping path="/css/**"/>
        <mvc:exclude-mapping path="/images/**"/>
        <mvc:exclude-mapping path="/js/**"/>
        <mvc:exclude-mapping path="/**.html"/>
        <!--攔截器實(shí)現(xiàn)類-->
        <bean id="login" class="com.ff.ssm.util.PreInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

這里我們以后端登錄 的控制器為例

@RestController
@RequestMapping(value = "/login")
public class LoginController {
    @Autowired
    LoginService loginService;
    @PostMapping(value = "/login")
    public CommonResult adminLogin(Admin admin, HttpSession session){
        CommonResult commonResult;
        try {
            Admin admin1 = loginService.login(admin);
            if(admin1==null){
                commonResult=new CommonResult(201,"賬號(hào)或密碼錯(cuò)誤",admin1);
            }else  {
                session.setAttribute("admin",admin1);
                commonResult=new CommonResult(200,"登錄成功",admin1);
            }
        }catch (Exception e){
            commonResult=new CommonResult(500,"登錄失敗","");
        }
        return commonResult;
    }
}

         如上, 前端發(fā)起了登錄請(qǐng)求 , 我們配置了攔截器, 會(huì)先進(jìn)入攔截器 , 根據(jù) preHandle() 方法決定

是否可以進(jìn)入到我們具體的登錄方法中 

      上述控制器例子是將用戶的信息存入了session中 , 我們每次接受前端的請(qǐng)求時(shí), 在攔截器中判斷用戶的信息是否還是有效的 , 有效則放行, 無效則攔截 , 所以前提是我們的登錄請(qǐng)求肯定是不能被攔截的, 因?yàn)檫@時(shí)候沒有登錄, 用戶信息為 null ,所以上面我們配置了不攔截登錄請(qǐng)求, 也不去攔截那些請(qǐng)求頁面

      以上就是SpringMVC中攔截器的具體功能和實(shí)現(xiàn) , 感謝閱讀

到此這篇關(guān)于零基礎(chǔ)入門SpringMVC攔截器的配置與使用的文章就介紹到這了,更多相關(guān)SpringMVC攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java Swing布局管理之BoxLayout布局

    java Swing布局管理之BoxLayout布局

    這篇文章主要為大家詳細(xì)介紹了java Swing布局管理之BoxLayout布局的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Maven項(xiàng)目部署到Jboss出現(xiàn)Failed to create a new SAX parser

    Maven項(xiàng)目部署到Jboss出現(xiàn)Failed to create a new SAX parser

    這篇文章主要為大家詳細(xì)介紹了Maven項(xiàng)目部署到Jboss出現(xiàn)Failed to create a new SAX parser的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • idea配置tomcat,idea配置web下lib的包詳解

    idea配置tomcat,idea配置web下lib的包詳解

    這篇文章主要介紹了idea配置tomcat,idea配置web下lib的包,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • spring?NamedContextFactory在Fegin配置及使用詳解

    spring?NamedContextFactory在Fegin配置及使用詳解

    在我們?nèi)粘m?xiàng)目中,使用FeignClient實(shí)現(xiàn)各系統(tǒng)接口調(diào)用變得更加簡單,?在各個(gè)系統(tǒng)集成過程中,難免會(huì)遇到某些系統(tǒng)的Client需要特殊的配置、返回讀取等需求。Feign使用NamedContextFactory來為每個(gè)Client模塊構(gòu)造單獨(dú)的上下文(ApplicationContext)
    2023-11-11
  • Spring Boot項(xiàng)目中jar包在服務(wù)器上啟動(dòng)的正確姿勢(shì)

    Spring Boot項(xiàng)目中jar包在服務(wù)器上啟動(dòng)的正確姿勢(shì)

    這篇文章主要給大家介紹了關(guān)于Spring Boot項(xiàng)目中jar包在服務(wù)器上啟動(dòng)的正確姿勢(shì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Java?I/O?(Input/Output)文件字節(jié)流舉例詳解

    Java?I/O?(Input/Output)文件字節(jié)流舉例詳解

    Java的輸入輸出流(IO)是用于與外部設(shè)備(如文件、網(wǎng)絡(luò)連接等)進(jìn)行數(shù)據(jù)交互的機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Java?I/O?(Input/Output)文件字節(jié)流的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包

    Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包

    這篇文章主要介紹了Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java檢查字符串是否一致的四種方法

    Java檢查字符串是否一致的四種方法

    字符串比較是常見的操作,包括比較相等、比較大小、比較前綴和后綴串等,在 Java 中,比較字符串的常用方法有四個(gè):equals(),equalsIgnoreCase(),compareTo()和compareToIgnoreCase(),下面詳細(xì)介紹這四個(gè)方法的使用
    2024-04-04
  • 基于springboot實(shí)現(xiàn)文件上傳

    基于springboot實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了基于springboot實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • java 判斷兩個(gè)時(shí)間段是否重疊的案例

    java 判斷兩個(gè)時(shí)間段是否重疊的案例

    這篇文章主要介紹了java 判斷兩個(gè)時(shí)間段是否重疊的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評(píng)論

正宁县| 原平市| 高陵县| 吉水县| 黔西县| 土默特右旗| 化州市| 平山县| 资中县| 泸西县| 凌源市| 普兰店市| 上蔡县| 团风县| 汤阴县| 乡城县| 宜良县| 石泉县| 永平县| 桃园县| 都兰县| 澄城县| 岚皋县| 获嘉县| 建宁县| 司法| 米林县| 北京市| 陆丰市| 益阳市| 密山市| 城步| 陇南市| 象州县| 嘉荫县| 喀什市| 海淀区| 当涂县| 田阳县| 昔阳县| 胶州市|