SpringBoot-拦截器和文件上传
1、拦截器
1.1、HandlerInterceptor 接口
/*** 登录检查* 1、配置好拦截器要拦截哪些请求* 2、把这些配置放在容器中*/
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {/*** 目标方法执行之前* @param request* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String requestURI = request.getRequestURI();log.info("preHandle拦截的请求路径是{}",requestURI);//登录检查逻辑HttpSession session = request.getSession();Object loginUser = session.getAttribute("loginUser");if(loginUser != null){//放行return true;}//拦截住。未登录。跳转到登录页request.setAttribute("msg","请先登录");
// re.sendRedirect("/");request.getRequestDispatcher("/").forward(request,response);return false;}/*** 目标方法执行完成以后* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {log.info("postHandle执行{}",modelAndView);}/*** 页面渲染以后* @param request* @param response* @param handler* @param ex* @throws Exception*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info("afterCompletion执行异常{}",ex);}
}
1.2、配置拦截器
/*** 1、编写一个拦截器实现HandlerInterceptor接口* 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)* 3、指定拦截规则(如果是拦截所有,静态资源也会被拦截)*/
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") //所有请求都被拦截包括静态资源.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //放行的请求}
}
1.3、拦截器原理
根据当前请求,找到HandlerExecutionChain(可以处理请求的handler以及handler的所有 拦截器)
先来顺序执行 所有拦截器的 preHandle方法
1、如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle2、如果当前拦截器返回为false。直接倒序执行所有已经执行了的拦截器的 afterCompletion
如果任何一个拦截器返回false。直接跳出不执行目标方法
所有拦截器都返回True。执行目标方法
倒序执行所有拦截器的postHandle方法
前面的步骤有任何异常都会直接倒序触发 afterCompletion
页面成功渲染完成以后,也会倒序触发 afterCompletion
2、文件上传
2.1、页面表单
<form method="post" action="/upload" enctype="multipart/form-data"><input type="file" name="file"><br><input type="submit" value="提交">
</form>
2.2、文件上传代码
/*** MultipartFile 自动封装上传过来的文件* @param email* @param username* @param headerImg* @param photos* @return*/@PostMapping("/upload")public String upload(@RequestParam("email") String email,@RequestParam("username") String username,@RequestPart("headerImg") MultipartFile headerImg,@RequestPart("photos") MultipartFile[] photos) throws IOException {log.info("上传的信息:email={},username={},headerImg={},photos={}",email,username,headerImg.getSize(),photos.length);if(!headerImg.isEmpty()){//保存到文件服务器,OSS服务器String originalFilename = headerImg.getOriginalFilename();headerImg.transferTo(new File("H:\\cache\\"+originalFilename));}if(photos.length > 0){for (MultipartFile photo : photos) {if(!photo.isEmpty()){String originalFilename = photo.getOriginalFilename();photo.transferTo(new File("H:\\cache\\"+originalFilename));}}}return "index";}
2.3、自动配置原理
文件上传自动配置类MultipartAutoConfiguration-MultipartProperties
自动配置好了 StandardServletMultipartResolver (文件上传解析器)
原理步骤
1、请求进来使用文件上传解析器判断(isMultipart)并封装(resolveMultipart,返回**MultipartHttpServletRequest)文件上传请求2、参数解析器来解析请求中的文件内容封装成MultipartFile3、将request中文件信息封装为一个Map,MultiValueMap<String, MultipartFile> FileCopyUtils 实现文件流的拷贝
@PostMapping("/upload")public String upload(@RequestParam("email") String email,@RequestParam("username") String username,@RequestPart("headerImg") MultipartFile headerImg,@RequestPart("photos") MultipartFile[] photos)
SpringBoot-拦截器和文件上传相关推荐
- Spring Boot(5) web开发(3)拦截器、文件上传、异常处理
Spring Boot(5) web开发(3)拦截器.文件上传.异常处理 学习视频: https://www.bilibili.com/video/BV19K4y1L7MT?p=49&spm_ ...
- SSM之SpringMVC 04 —— Ajax、拦截器、文件上传和下载
系列文章 SSM之SpringMVC 01 -- SpringMVC原理及概念.Hello SpringMVC 注解版和配置版 SSM之SpringMVC 02 -- Controller和RestF ...
- Springboot2拦截器与文件上传
拦截器-登录检查与静态资源放行 1.编写一个拦截器实现HandlerInterceptor接口 2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors()) 3. ...
- .net mvc actionresult 返回字符串_072-SpringMVC后端控制器接收参数、处理器方法返回值类型、拦截器、文件上传下载...
1. 注解式开发之annotation-driven解释 (1) mvc注解驱动在哪个文件中配置? 在springmvc中配置 (2) 配置mvc注解驱动使用哪个标签? 2. 注解式开发之视图解析器 ...
- Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL
Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...
- SpringMVC之拦截器和文件上传下载
过滤器与拦截器的区别:拦截器是AOP思想的具体应用. 过滤器 : servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行 ...
- SpringMVC学习总结(三):转发重定向、拦截器、文件上传等
转发和重定向 当Controller中方法的返回值为字符串时,默认为视图名称.当返回值字符串以"forward:"或者"redirect:"开头,则会被认为是转 ...
- jfinal jboot 拦截器过滤文件上传请求 和 跨域解决方法
public class PublicInterceptor implements Interceptor {@Overridepublic void intercept(Invocation inv ...
- 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化
管理springmvc组件 概述 在使用springmvc时要配置哪些东西 前端控制器 控制器映射器和适配器 映射器 Map<Set<String>,Object> Set& ...
最新文章
- matlab检验两个样本的,两样本独立T检验MATLAB代码
- 51cto 网站挑错,你来干?
- 【LeetCode】414.第三大的数
- SecureCRT配置proxy连接云主机
- 有钱了该不该提前还清房贷?
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
- 初尝微信小程序2-基本框架
- package和import
- VS2005 添加lib 的方法
- C++构造函数异常(二)
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析...
- 《WEB全栈工程师的自我修养》--索引笔记
- 2020云课堂智慧职教答案计算机,2020云课堂智慧职教答案英语,云智慧职教题库,智慧职教测试答案...
- 中国地区城市php,中国城市列表
- 产品经理认证(NPDP)---新产品流程
- mysql 读写分离_详解MySQL读写分离
- Linux 安装PostgreSql
- 计算机考研搜集的资料(408)
- 探索C++虚函数在g++中的实现
- UnityShader案例篇—旋转、平移和缩放