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

Java全面深入探究SpringBoot攔截器與文件上傳

 更新時(shí)間:2022年05月13日 10:18:15   作者:鐵甲小寶同學(xué)  
攔截器對(duì)使用SpringMvc、Struts的開發(fā)人員來說特別熟悉,因?yàn)槟阒灰肴プ龊靡粋€(gè)項(xiàng)目必然會(huì)用到它,文件上傳是一個(gè)很常見的功能。在項(xiàng)目開發(fā)過程中,我們通常都會(huì)使用一些成熟的上傳組件來實(shí)現(xiàn)對(duì)應(yīng)的功能

攔截器

攔截器的概念

動(dòng)態(tài)攔截Actioon調(diào)用的對(duì)象,使開發(fā)者在一個(gè)Actioon執(zhí)行的前后執(zhí)行一段代碼,也可以在Action執(zhí)行前阻止其執(zhí)行,同時(shí)也提供了一種可以提取Action中可重用部分代碼的方式。

作用:

動(dòng)態(tài)攔截Action調(diào)用的對(duì)象(也就是實(shí)際項(xiàng)目中的controller層的接口)

一般攔截器用于對(duì)用戶訪問的限制。如當(dāng)用戶沒有登錄時(shí)訪問主頁面,則可以使用攔截器進(jìn)行攔截并重定向到登錄頁面。

攔截器的配置

創(chuàng)建interceptor 文件夾并創(chuàng)建LoginInterceptor Java文件且實(shí)現(xiàn)HandlerInterceptor 這個(gè)接口。

//必須實(shí)現(xiàn)HandlerInterceptor這個(gè)接口
public class LoginInterceptor implements HandlerInterceptor {
    /*
    * 目標(biāo)方法執(zhí)行以前
    * */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");
        if(loginUser != null) {
            return true;
        }
        request.setAttribute("msg" ,"請(qǐng)登錄!");
//        response.sendRedirect("/");
        request.getRequestDispatcher("/").forward(request,response);
        return  false;
    }
    //目標(biāo)方法執(zhí)行以后
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    /**
     * 頁面渲染以后
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

配置攔截器

創(chuàng)建 config 文件夾并創(chuàng)建 AdminWebConfig 文件并實(shí)現(xiàn)WebMvcConfigurer的addInterceptors。

@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**") //靜態(tài)路徑也會(huì)被攔截
                .excludePathPatterns("/","/login","/css/**","/fonts/**" ,"/images/**","/js/**");
    }
}

攔截器的原理

1、根據(jù)當(dāng)前請(qǐng)求,找到**HandlerExecutionChain【**可以處理請(qǐng)求的handler以及handler的所有 攔截器】

2、先來順序執(zhí)行 所有攔截器的 preHandle方法

  • 1、如果當(dāng)前攔截器prehandler返回為true。則執(zhí)行下一個(gè)攔截器的preHandle
  • 2、如果當(dāng)前攔截器返回為false。直接 倒序執(zhí)行所有已經(jīng)執(zhí)行了的攔截器的 afterCompletion;

3、如果任何一個(gè)攔截器返回false。直接跳出不執(zhí)行目標(biāo)方法

4、所有攔截器都返回True。執(zhí)行目標(biāo)方法

5、倒序執(zhí)行所有攔截器的postHandle方法。

6、前面的步驟有任何異常都會(huì)直接倒序觸發(fā) afterCompletion

7、頁面成功渲染完成以后,也會(huì)倒序觸發(fā) afterCompletion

文件上傳

在之前我們學(xué)習(xí)SSM的時(shí)候就知道了 文件上傳 這個(gè)功能,所以在 SpringBoot中我們就不在過多介紹,原理其實(shí)都差不多。

前端文件:

<form method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file"><br>
    <input type="submit" value="提交">
</form>

Controller層的配置:

@Controller
public class FileController {
    @GetMapping("/updateFile")
    public String FileUp(){
        return "FileUp";
    }  
@PostMapping("/upload") // //new annotation since 4.3
    public String singleFileUpload(@RequestParam("file") MultipartFile file,
                                   RedirectAttributes redirectAttributes) {
        if (file.isEmpty()) {
            redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
            return "redirect:uploadStatus";
        }
        try {
            // Get the file and save it somewhere
            byte[] bytes = file.getBytes();
            Path path = Paths.get( file.getOriginalFilename());
            Files.write(path, bytes);
            redirectAttributes.addFlashAttribute("message",
                    "You successfully uploaded '" + file.getOriginalFilename() + "'");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "redirect:/main.html";
    }
}

更改文件上傳大小

在application.properties中配置文件大?。?/p>

spring.servlet.multipart.max-file-size=10MB //單文件大小
spring.servlet.multipart.max-request-size=100MB //多文件

到此這篇關(guān)于Java全面深入探究SpringBoot攔截器與文件上傳的文章就介紹到這了,更多相關(guān)Java SpringBoot攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    在java中處理字符時(shí),經(jīng)常會(huì)發(fā)生亂碼,下面這篇文章主要給大家介紹了關(guān)于Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java中常用加密/解密方法詳解

    Java中常用加密/解密方法詳解

    本文主要介紹了Java中常用加密/解密方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • 使用Java servlet實(shí)現(xiàn)自動(dòng)登錄退出功能

    使用Java servlet實(shí)現(xiàn)自動(dòng)登錄退出功能

    這篇文章主要介紹了使用Java servlet實(shí)現(xiàn)自動(dòng)登錄退出功能,,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java實(shí)現(xiàn)掃雷游戲

    java實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • springboot整合shiro與自定義過濾器的全過程

    springboot整合shiro與自定義過濾器的全過程

    這篇文章主要給大家介紹了關(guān)于springboot整合shiro與自定義過濾器以及Shiro中權(quán)限控制的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Java實(shí)現(xiàn)簡單抽獎(jiǎng)功能界面

    Java實(shí)現(xiàn)簡單抽獎(jiǎng)功能界面

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單抽獎(jiǎng)功能界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • FeignClient如何通過配置變量調(diào)用配置文件url

    FeignClient如何通過配置變量調(diào)用配置文件url

    這篇文章主要介紹了FeignClient如何通過配置變量調(diào)用配置文件url,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 基于字符串常用API(詳解)

    基于字符串常用API(詳解)

    下面小編就為大家?guī)硪黄谧址S肁PI(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 基于spring實(shí)現(xiàn)websocket實(shí)時(shí)推送實(shí)例

    基于spring實(shí)現(xiàn)websocket實(shí)時(shí)推送實(shí)例

    這篇文章主要為大家詳細(xì)介紹了基于spring實(shí)現(xiàn)websocket實(shí)時(shí)推送實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • java隨機(jī)字符補(bǔ)充版

    java隨機(jī)字符補(bǔ)充版

    今天在zuidaimai看到一個(gè)java隨機(jī)字符生成demo,正好要用,但發(fā)現(xiàn)不完整,重新整理一下,分享給有需要的朋友
    2014-01-01

最新評(píng)論

娄烦县| 衡阳市| 新田县| 航空| 金秀| 响水县| 共和县| 区。| 宁安市| 萨迦县| 惠安县| 千阳县| 柳州市| 华池县| 忻州市| 新乡县| 宜都市| 无为县| 莒南县| 柳河县| 静海县| 巴彦淖尔市| 南平市| 涞源县| 西吉县| 句容市| 剑河县| 文昌市| 宁晋县| 新干县| 淄博市| 富民县| 赤壁市| 紫金县| 娄底市| 崇仁县| 元阳县| 巴塘县| 越西县| 盈江县| 井冈山市|