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攔截器與文件上傳的文章就介紹到這瞭,更多相關Java SpringBoot攔截器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- springboot過濾器和攔截器的實例代碼
- 詳解SpringMVC的攔截器鏈實現及攔截器鏈配置
- SpringBoot攔截器使用精講
- 詳解Spring 攔截器流程及多個攔截器的執行順序
- Java設計模式之責任鏈模式