Spring MVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用与权限验证、记录请求消息的日志、判断用户是否登录等功能。
SpringMVC 中的自定义拦截器,可以通过实现 HandlerInterceptor 接口来定义。重点重写preHandle()方法。
preHandle():这个方法在业务处理器处理请求之前被调用,可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和 Controller 都不会执行;当返回值为true是就会继续调用下一个 Interceptor 的 preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的 Controller 方法。
定义拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//得到登录用户
Object obj = request.getSession().getAttribute("loginUser");
if (obj == null){//没有登录
response.sendRedirect("/login.html?errorInfo=noland");
//没有通过,不能继续访问目标资源
return false;
}
//通过拦截器,继续访问目标资源
return true;
}
}
注册拦截器
拦截器定义后,必须要完成注册,才能被Spring 容器所识别。在注册时,需要指定拦截的范围
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())//注册拦截器
.addPathPatterns("/index.html");//定义拦截范围
}
}
文件上传
文件上传是将客户本地的文字、图片、视频等上传给 WEB 服务器。
文件上传,要求客户端必须以 POSH 方式提交,并在表单中添加 enctype=“multipart/form-data” 属性
在application.yml文件添加文件大小设置
server:
port: 8088
spring:
servlet:
multipart:
maxFileSize: 20MB
maxRequestSize: 100MB
public String add(String userName, @RequestParam("face") MultipartFile mf) throws IOException {
// 得到客户端上传文件的文件名
String fileName = mf.getOriginalFilename();
//将上传文件的二进制数据保存到服务器本地文件
mf.transferTo(new File("/Users/mac/Desktop/javaWeb/interceptor
/src/main/resources/static
/userface/"+fileName));
return "ok";
}
在配置类中,注册上传文件路径的映射
@Configuration
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/face/**")
.addResourceLocations("file:/Users/mac/Desktop/javaWeb/interceptor
/src/main/resources/static/userface/");
}
}



