Java全面深入探究SpringBoot攔截器與文件上傳
攔截器
攔截器的概念
動態(tài)攔截Actioon調(diào)用的對象,使開發(fā)者在一個Actioon執(zhí)行的前后執(zhí)行一段代碼,也可以在Action執(zhí)行前阻止其執(zhí)行,同時也提供了一種可以提取Action中可重用部分代碼的方式。
作用:
動態(tài)攔截Action調(diào)用的對象(也就是實際項目中的controller層的接口)
一般攔截器用于對用戶訪問的限制。如當用戶沒有登錄時訪問主頁面,則可以使用攔截器進行攔截并重定向到登錄頁面。
攔截器的配置
創(chuàng)建interceptor 文件夾并創(chuàng)建LoginInterceptor Java文件且實現(xiàn)HandlerInterceptor 這個接口。
//必須實現(xiàn)HandlerInterceptor這個接口 public class LoginInterceptor implements HandlerInterceptor { /* * 目標方法執(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" ,"請登錄!"); // response.sendRedirect("/"); request.getRequestDispatcher("/").forward(request,response); return false; } //目標方法執(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 文件并實現(xiàn)WebMvcConfigurer的addInterceptors。
@Configuration public class AdminWebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") //靜態(tài)路徑也會被攔截 .excludePathPatterns("/","/login","/css/**","/fonts/**" ,"/images/**","/js/**"); } }
攔截器的原理
1、根據(jù)當前請求,找到**HandlerExecutionChain【**可以處理請求的handler以及handler的所有 攔截器】
2、先來順序執(zhí)行 所有攔截器的 preHandle方法
- 1、如果當前攔截器prehandler返回為true。則執(zhí)行下一個攔截器的preHandle
- 2、如果當前攔截器返回為false。直接 倒序執(zhí)行所有已經(jīng)執(zhí)行了的攔截器的 afterCompletion;
3、如果任何一個攔截器返回false。直接跳出不執(zhí)行目標方法
4、所有攔截器都返回True。執(zhí)行目標方法
5、倒序執(zhí)行所有攔截器的postHandle方法。
6、前面的步驟有任何異常都會直接倒序觸發(fā) afterCompletion
7、頁面成功渲染完成以后,也會倒序觸發(fā) 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攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題
這篇文章主要介紹了SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid)
這篇文章主要介紹了springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01