Spring Boot 配置拦截器
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动
目前,
星球
内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4
,手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 255 小节,累计 47w+ 字,讲解图:2090 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1500+ 小伙伴加入,欢迎点击围观
。
本节中,您将学习如何在 Spring Boot 2.0 中配置拦截器。通过拦截器,我们可以针对特定 URI 做拦截,做相关业务处理,比如检查用户是否登录,打印每个请求的处理耗时等。
接下来,先让我们新建一个 Web 项目。
一、新建一个拦截器
新建登录验证类 LoginValidationInterceptor.java
:
package site.exception.springbootinterceptor.interceptor;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import site.exception.springbootinterceptor.entity.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author www.exception.site (exception 教程网)
* @date 2019/2/27
* @time 12:19
* @discription 登录验证拦截器
**/
public class LoginValidationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle ...");
User user = (User) request.getSession().getAttribute("user");
if (user == null) {
// 若未登录,重定向到登录页面
response.sendRedirect("login.html");
return false;
}
// 若已登录,继续往下执行
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
System.out.println("postHandle ...");
// controller 方法调用完毕后,执行此方法
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
System.out.println("afterCompletion ...");
// 页面渲染完成后调用此方法, 一般用来清除某些资源等
}
}
定义一个拦截器类后,您需要实现 HandlerInterceptor
接口,其有三个方法可以重写:
- preHandle: 在调用 Controller 方法之前,执行此方法;
- postHandle: 在调用 Controller 方法之后,页面渲染之前,执行此方法,通常您可以在此方法中将渲染的视图名称更改为其他视图名称;
- afterCompletion: 此方法在页面渲染完毕之后被调用;
二、配置拦截器
上面,您已经定义好一个登陆拦截的拦截器了,接下来,需要做一下全局配置。
新建 WebMvcConfig.java
配置类:
package site.exception.springbootinterceptor.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import site.exception.springbootinterceptor.interceptor.LoginValidationInterceptor;
/**
* @author www.exception.site (exception 教程网)
* @date 2019/2/27
* @time 12:17
* @discription
**/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 配置拦截器
* @param interceptorRegistry
*/
@Override
public void addInterceptors(InterceptorRegistry interceptorRegistry) {
// 拦截所有 /admin/** 的访问地址
interceptorRegistry.addInterceptor(new LoginValidationInterceptor()).addPathPatterns("/admin/**");
}
}
到此,一个简单的拦截器就配置完成了!
GitHub 源码
https://github.com/weiwosuoai/spring-boot-tutorial/tree/master/spring-boot-interceptor