springboot拦截器
拦截器的底层是HandlerInterceptor 这个接口
这个接口中有三个方法:
其中preHander 是拦截前置工作
postHander是拦截逻辑处理完毕后的工作
afterCompletion是页面渲染完毕后,要做的一些工作,即请求已经完成后的工作
我们实现一个登录拦截
1.新建一个类,实现接口HandlerInterceptor,用来登录检查
package com.example.adminproject.Interceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 实现拦截器的功能,拦截哪些功能 * 将拦截器配置到容器中 * * */ //一个新的注解,lombok提供的日志 @Slf4j public class LoginInterceptor implements HandlerInterceptor { /** * * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("拦截的请求{}",request.getRequestURI()); //登录检查 HttpSession session = request.getSession(); Object loginUser = session.getAttribute("loginUser"); if (loginUser!=null){ return true; //拦截放行 } else { //拦住的话 session.setAttribute("msg","请先登录"); response.sendRedirect("/"); 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.实现了拦截器后,我们要配置到springboot容器中
使用Configuration注解,实现WebmvcConfigurer接口中的拦截器方法
并指定拦截规则。注意静态资源!!
package com.example.adminproject.Config; import com.example.adminproject.Interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class AdminWebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**")//拦截所有请求包括静态资源 .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //但是不拦截包括登录页面和静态资源 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!