您好,登錄后才能下訂單哦!
今天小編給大家分享一下Java中SpringBoot攔截器與文件上傳怎么實(shí)現(xiàn)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
動(dòng)態(tài)攔截Actioon調(diào)用的對(duì)象,使開(kāi)發(fā)者在一個(gè)Actioon執(zhí)行的前后執(zhí)行一段代碼,也可以在Action執(zhí)行前阻止其執(zhí)行,同時(shí)也提供了一種可以提取Action中可重用部分代碼的方式。
作用:
動(dòng)態(tài)攔截Action調(diào)用的對(duì)象(也就是實(shí)際項(xiàng)目中的controller層的接口)
一般攔截器用于對(duì)用戶訪問(wèn)的限制。如當(dāng)用戶沒(méi)有登錄時(shí)訪問(wèn)主頁(yè)面,則可以使用攔截器進(jìn)行攔截并重定向到登錄頁(yè)面。
創(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 { } /** * 頁(yè)面渲染以后 * @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、先來(lái)順序執(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、頁(yè)面成功渲染完成以后,也會(huì)倒序觸發(fā) afterCompletion
在之前我們學(xué)習(xí)SSM的時(shí)候就知道了 文件上傳 這個(gè)功能,所以在 SpringBoot中我們就不在過(guò)多介紹,原理其實(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 //多文件
以上就是“Java中SpringBoot攔截器與文件上傳怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。