91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中SpringBoot攔截器與文件上傳怎么實現

發布時間:2022-05-13 13:52:56 來源:億速云 閱讀:318 作者:iii 欄目:開發技術

今天小編給大家分享一下Java中SpringBoot攔截器與文件上傳怎么實現的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

攔截器

攔截器的概念

動態攔截Actioon調用的對象,使開發者在一個Actioon執行的前后執行一段代碼,也可以在Action執行前阻止其執行,同時也提供了一種可以提取Action中可重用部分代碼的方式。

作用:

動態攔截Action調用的對象(也就是實際項目中的controller層的接口)

一般攔截器用于對用戶訪問的限制。如當用戶沒有登錄時訪問主頁面,則可以使用攔截器進行攔截并重定向到登錄頁面。

攔截器的配置

創建interceptor 文件夾并創建LoginInterceptor Java文件且實現HandlerInterceptor 這個接口。

//必須實現HandlerInterceptor這個接口
public class LoginInterceptor implements HandlerInterceptor {
    /*
    * 目標方法執行以前
    * */
    @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" ,"請登錄!");
//        response.sendRedirect("/");
        request.getRequestDispatcher("/").forward(request,response);
        return  false;
    }
    //目標方法執行以后
    @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);
    }
}

配置攔截器

創建 config 文件夾并創建 AdminWebConfig 文件并實現WebMvcConfigurer的addInterceptors。

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

攔截器的原理

1、根據當前請求,找到**HandlerExecutionChain【**可以處理請求的handler以及handler的所有 攔截器】

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

  • 1、如果當前攔截器prehandler返回為true。則執行下一個攔截器的preHandle

  • 2、如果當前攔截器返回為false。直接 倒序執行所有已經執行了的攔截器的 afterCompletion;

3、如果任何一個攔截器返回false。直接跳出不執行目標方法

4、所有攔截器都返回True。執行目標方法

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

6、前面的步驟有任何異常都會直接倒序觸發 afterCompletion

7、頁面成功渲染完成以后,也會倒序觸發 afterCompletion

文件上傳

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

前端文件:

<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中配置文件大小:

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

以上就是“Java中SpringBoot攔截器與文件上傳怎么實現”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乃东县| 通榆县| 潼关县| 青海省| 天津市| 乌审旗| 石棉县| 辽阳县| 临夏县| 饶河县| 雷山县| 宁武县| 德化县| 玉林市| 都安| 河北区| 五常市| 龙门县| 祥云县| 静海县| 环江| 灵寿县| 离岛区| 锡林浩特市| 山丹县| 宝兴县| 鹰潭市| 富裕县| 阳高县| 周至县| 英德市| 文水县| 绿春县| 泰顺县| 天水市| 晋宁县| 方正县| 遵义市| 定兴县| 高唐县| 通化县|