您好,登錄后才能下訂單哦!
今天小編給大家分享一下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攔截器與文件上傳怎么實現”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。