19.拦截器
配置拦截器需要实现两步
1.配置自己的拦截器,实现HandlerInterceptor接口,重写里面的三个方法,注意方法的执行时机
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
//重点1:目标方法执行前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if(session.getAttribute("loginUser")==null){
log.info("用户没有登录,转发到登录!");
session.setAttribute("msg", "请先登录!");
request.getRequestDispatcher("/").forward(request, response);
//重点4:false为拦截
return false;
}
//重点5:true为放行
return true;
}
//重点2:目标方法执行完成后执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("目标方法执行完毕,返回给页面的值{}",modelAndView);
}
//重点3:页面渲染完成后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("页面渲染完毕,执行异常{}",ex);
}
}
2.在定制化webmvc中添加自己的拦截器
/**
* 1.编写一个拦截器实现HandlerInterceptor接口
* 2.拦截器注册到容器中(在webmvcconfigurer的addInterceptors)
* 3.指定拦截规则【如果是拦截所有,静态资源也会拦截】
*/
//重点1:自定义的springboot配置类
@Configuration
public class MyWebConfig {
//添加自定义的WebMvcConfigurer组件,并重写addInterceptor方法(添加拦截器!)
@Bean
public WebMvcConfigurer getWebMvcConfiguration(){
return new 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 R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术