Spring Boot 配置拦截器
通过拦截器,我们可以针对特定 URI 做拦截,做相关业务处理,比如检查用户是否登录,打印每个请求的处理耗时等。
一、新建一个拦截器
新建登录验证类 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; /** * @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; /** * @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/**"); } }
到此,一个简单的拦截器就配置完成了!
本文来自博客园,作者:深码青年,转载请注明原文链接:https://www.cnblogs.com/shenMaQN/p/17764279.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库