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-拦截器和文件上传相关推荐

  1. Spring Boot(5) web开发(3)拦截器、文件上传、异常处理

    Spring Boot(5) web开发(3)拦截器.文件上传.异常处理 学习视频: https://www.bilibili.com/video/BV19K4y1L7MT?p=49&spm_ ...

  2. SSM之SpringMVC 04 —— Ajax、拦截器、文件上传和下载

    系列文章 SSM之SpringMVC 01 -- SpringMVC原理及概念.Hello SpringMVC 注解版和配置版 SSM之SpringMVC 02 -- Controller和RestF ...

  3. Springboot2拦截器与文件上传

    拦截器-登录检查与静态资源放行 1.编写一个拦截器实现HandlerInterceptor接口 2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors()) 3. ...

  4. .net mvc actionresult 返回字符串_072-SpringMVC后端控制器接收参数、处理器方法返回值类型、拦截器、文件上传下载...

    1. 注解式开发之annotation-driven解释 (1) mvc注解驱动在哪个文件中配置? 在springmvc中配置 (2) 配置mvc注解驱动使用哪个标签? 2. 注解式开发之视图解析器 ...

  5. Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL

    Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...

  6. SpringMVC之拦截器和文件上传下载

    过滤器与拦截器的区别:拦截器是AOP思想的具体应用. 过滤器 : servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行 ...

  7. SpringMVC学习总结(三):转发重定向、拦截器、文件上传等

    转发和重定向 当Controller中方法的返回值为字符串时,默认为视图名称.当返回值字符串以"forward:"或者"redirect:"开头,则会被认为是转 ...

  8. jfinal jboot 拦截器过滤文件上传请求 和 跨域解决方法

    public class PublicInterceptor implements Interceptor {@Overridepublic void intercept(Invocation inv ...

  9. 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化

    管理springmvc组件 概述 在使用springmvc时要配置哪些东西 前端控制器 控制器映射器和适配器 映射器  Map<Set<String>,Object> Set& ...

最新文章

  1. matlab检验两个样本的,两样本独立T检验MATLAB代码
  2. 51cto 网站挑错,你来干?
  3. 【LeetCode】414.第三大的数
  4. SecureCRT配置proxy连接云主机
  5. 有钱了该不该提前还清房贷?
  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
  7. 初尝微信小程序2-基本框架
  8. package和import
  9. VS2005 添加lib 的方法
  10. C++构造函数异常(二)
  11. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析...
  12. 《WEB全栈工程师的自我修养》--索引笔记
  13. 2020云课堂智慧职教答案计算机,2020云课堂智慧职教答案英语,云智慧职教题库,智慧职教测试答案...
  14. 中国地区城市php,中国城市列表
  15. 产品经理认证(NPDP)---新产品流程
  16. mysql 读写分离_详解MySQL读写分离
  17. Linux 安装PostgreSql
  18. 计算机考研搜集的资料(408)
  19. 探索C++虚函数在g++中的实现
  20. UnityShader案例篇—旋转、平移和缩放

热门文章

  1. jquery-滑动的选项卡
  2. 中间固定两边自适应 两边固定中间自适应 promise
  3. 移动开发技术有哪些?
  4. Handler源码解读
  5. robot framework集成Jenkins环境
  6. 易宝典文章——玩转Office 365中的Exchange Online服务 之二十六 根据文本内容筛选群发邮件...
  7. LeetCode OJ:Pascal's Triangle(帕斯卡三角)
  8. 重新组织和重新生成索引(转载)
  9. fedora yum 安装mysql
  10. 函数调用过程实例详解