之前呢已经学习到了SpringBoot的一些自动配置原理,视图解析器,数据响应和处理的内容。接下来学习实际开发比较重要的内容,拦截器
一、拦截器 1、如何实现拦截器原生自带的是用实现HandlerInterceptor接口来实现拦截功能,但是后续呢,基本都是采用SpringSecurity来完成登录拦截验证。
(1)实现接口HandlerInterceptor
/**
* 登录检查
*/
public class MyInterceptor implements HandlerInterceptor {
/**
* 目标方法执行之前
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
/**
* 目标方法执行
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@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 {
}
}
(2)实现登录拦截
- 登录检查
- 配置好拦截器要拦截哪些要求
- 把这些配置放在容器中
public class MyInterceptor implements HandlerInterceptor {
/**
* 目标方法执行之前
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
/**
* 目标方法执行
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@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 {
}
}
-
此时启动测试
就没有了我们的CSS和HTML样式了,所以我们的拦截器可以初步判断成功了。 -
放行css等样式看看
public class MyInterceptor implements HandlerInterceptor {
/**
* 目标方法执行之前
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//我们在拦截之前要完成的逻辑
return false;
}
/**
* 目标方法执行
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@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 {
//拦截之后,你想要 *** 作的逻辑
}
}
- 创建自己的拦截器
- 然后注入容器
- 配置拦截规则(如果拦截的是/**,记得它拦截的是所有,包括你的静态资源)
- 配置一个controller并且不放行
-
断点打在这里
-
经过这一步获得了我们的可以处理请求的Handler以及Handler的所有拦截器
-
进入这里看看
-
在这里顺序执行拦截器的preHandler方法(就会返回true)
- 返回true后,则执行下一个拦截器的preHandler
- 返回为false后,直接触发triggerAfterCompletion(倒叙执行所有已经执行了的拦截器的afterCompletion,所以为什么:当你有个拦截器的时候,你的afterCompletion就会反过来执行)
-
如果任何一个拦截器执行失败返回false直接跳出不自信目标方法
-
最后所有的拦截器都会返回true。
-
倒叙执行所有拦截器的postHandler方法
-
前面的所有步骤,有任何的异常,都会直接触发,afterCompletion方法(比如下面的第二个烂机器爆炸了)
-
页面成功渲染完成后,也会倒叙触发我们的triggerAfterCompletion方法
- html
-
可以如下方式写(这里就只是模拟单文件)
-
controller
- 先测试一下行不行
- 获取数据
多文件就这样写
- 启动测试
- 测试发现什么都没有
- 检测路径
- 换个试一试
- 同样的如果多文件就这样写
文件上传自动配置类MultipartAutoConfiguration(里面有MultipartProperties)
- 自动配置了文件上传解析器(StandardServletMultipartResolver):文件上传解析器
-
首先请求不管怎么样都是分析我们的DispatcherServlet类里面的doDispatch方法里面进行分析
-
首先来到了这一步
选择(进入这个放啊) -
这里就要判断请求是否使用文件上传解析器。
-
然后要在这里进行判断(封装为一个StandardMultipartHttpServletRequest)
-
我们的参数解析器解析请求中的文件类型MultipartFile
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)