news 2026/7/13 23:19:14

第十一章篇 实现拦截器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第十一章篇 实现拦截器

SpringMVC中拦截器用于对处理器(controller)进行预处理和后处理。

拦截器需要实现Interceptor接口,接口有是哪个方法,分别为:

preHandle: 客户端发送请求,在处理器执行请求之前执行preHandle方法中逻辑,当该方法返回true则执行下个拦截器(如果有),或者处理器

postHandle: 当处理器执行完之后,视图渲染之后执行该方法 。 后置处理,对ModelAndView进行修改

afterCompletion: 在整个请求结束(视图渲染之后)执行。对资源进行关闭,记录日志

代码实现
创建拦截器类实现HandlerInterceptor接口
/** * 自定义拦截器类 */ @Component public class MyInterceptor implements HandlerInterceptor { /** * 在视图渲染之后执行的方法 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("---------afterCompletion--------"); } /** * 表示 请求 执行处理器方法之前,先执行拦截器中prehandle方法中的逻辑 * @param request 请求对象 * @param response 响应对象 * @return boolean 如果指定该方法逻辑之后返回true,则执行下一个拦截器(如果有),如果没有就执行处理器 。返回false表示拦截当前请求 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("--------preHandle------------"); return false; //放行 } /** * 在执行处理器之后,渲染视图之前执行 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("---------postHandle--------"); } }
创建配置类,设置拦截器拦截处理器
/** * 自定义配置类 * 配置拦截器 */ @Configuration public class MyConfiguration implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; /** * 重写添加拦截器方法 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { //添加拦截器 registry.addInterceptor(myInterceptor) //设置拦截器目标(处理器) // .addPathPatterns("/user/login","/params") //拦截部分url信息 .addPathPatterns("/**") //拦截所有处理器(Controller),注意包括静态资源 .excludePathPatterns("/userDetail.html"); //表示用户访问login页面时不会被拦截器 } }
登录方法
@RestController public class LoginController { /** * 用户登录方法 */ @RequestMapping("login") public ResultObj login(String username,String password){ //判断用户名和密码是否正确 if(username.equals("root") && password.equals("234")){ return ResultObj.ok(username); }else { //表示用户名或密码错误, 抛出异常对象 throw new UserNameAndPWDErrorException("用户名或密码错误"); } } }

练习

通过拦截器实现用户认证操作

有登录页面、和登录接口 可以在用户不用登录即可访问

定义用户管理CRUD操作,这些操作需要用户认证之后方可访问

定义拦截器实现访问拦截器,判断用户是否登录,如果登录则可以访问 用户管理中CRUD接口,否则不能访问

思路:使用拦截器将所有资源拦截,放行登录页面和登录的接口,登录成功后设置一个session保存一个身份令牌用于让拦截器进行放行,在拦截器中进行编写代码:凡是没有session身份令牌的访问一律拦截

代码实现

创建登录页面

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <!-- 用户登录表单--> <form action="/user/login" method="post"> <div> <input type="text" name="uname" placeholder="请输入用户名称" /> </div> <div> <input type="password" name="pwd" placeholder="请输入用户密码" /> </div> <div> <input type="submit" value="登录账号" /> <input type="reset" /> </div> </form> </body> </html>

UserController类

@RestController public class UserController { /** * 用户登录 接口方法 */ @RequestMapping("/user/login") public ResultObj login(@RequestParam String uname, @RequestParam String pwd, HttpSession session){ //1.判断用户名和密码是否正确 if(uname.equals("ykj") && pwd.equals("333")){ //表示用户登录成功 //保存用户信息到session对象 session.setAttribute("uname", uname); //响应成功信息给前端 return ResultObj.ok(uname); }else { //表示登录失败 throw new UserNameAndPWDErrorException("你输入用户名和密码错误"); } } /** * 查询所有用户信息 */ @RequestMapping("/selectAll") public ResultObj selectAll(){ return ResultObj.ok().msg("查询所有用户成功!"); } /** * 新增方法 */ @RequestMapping("/addUser") public ResultObj addUser(){ return ResultObj.ok().msg("新增用户成功"); } /** * 删除方法 */ @RequestMapping("/delById") public ResultObj delById(Integer uid){ return ResultObj.ok().msg("删除用户成功"); } }

创建用户认证拦截器

/** * 自定义用户认证 拦截器 */ @Component public class CheckIsLoginHandlerIntercptor implements HandlerInterceptor { ​ /** * 用户在方法指定方法之前执行执行逻辑代码 * 判断用户是否登录 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //1.获取sesssion对象 HttpSession session = request.getSession(); //2.获取用户名 String uname = (String) session.getAttribute("uname"); //3.判断uname是否有值 if(uname != null && !uname.trim().isEmpty()){ //表示用户一登录 return true;//放行 } //重定向到登录页面 response.sendRedirect("/loginPage.html"); return false;//拦截器 } }
修改配置类,并配置拦截器
/** * 自定义配置类 * 配置拦截器 */ @Configuration public class MyConfiguration implements WebMvcConfigurer { ​ @Autowired private MyInterceptor myInterceptor; @Autowired private CheckIsLoginHandlerIntercptor checkIsLoginHandlerIntercptor; /** * 重写添加拦截器方法 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { //添加拦截器 registry.addInterceptor(checkIsLoginHandlerIntercptor) //设置拦截器目标(处理器) // .addPathPatterns("/user/login","/params") //拦截部分url信息 .addPathPatterns("/**") //拦截所有处理器(Controller),注意包括静态资源 .excludePathPatterns("/loginPage.html","/user/login"); //表示用户访问login页面时不会被拦截器 } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 5:43:18

Docker + 多模态Agent = 王炸组合?5个真实生产环境编排案例深度剖析

第一章&#xff1a;Docker与多模态Agent融合的架构演进随着人工智能系统向复杂化、分布式方向发展&#xff0c;Docker容器技术与多模态Agent系统的融合成为现代智能架构的重要演进路径。该融合模式通过容器化封装实现多模态感知、决策与执行模块的解耦&#xff0c;提升系统可扩…

作者头像 李华
网站建设 2026/7/14 6:14:33

你用过哪些国产实时数据库?

随着中国数字经济加速发展&#xff0c;国产数据库正从政策驱动的“替代”走向技术创新驱动的“超越”。在这样一个快速增长的市场中&#xff0c;实时数据库作为连接工业现场与信息系统的关键桥梁&#xff0c;其重要性日益凸显。而在这个细分赛道中&#xff0c;大庆紫金桥软件技…

作者头像 李华
网站建设 2026/7/14 15:35:14

Android v4l2 camera apk:快速实现摄像头调试的终极工具

Android v4l2 camera apk&#xff1a;快速实现摄像头调试的终极工具 【免费下载链接】Androidv4l2cameraapk资源介绍 Android v4l2 camera apk是一款专为开发者设计的摄像头功能实现工具&#xff0c;支持在Android设备上进行摄像头预览和调试。它兼容多种Android版本&#xff0…

作者头像 李华
网站建设 2026/7/13 21:38:52

【STM32】低功耗

目录1 什么是低功耗&#xff1f;2 STM32电源系统结构3 低功耗模式介绍3.1 睡眠模式&#xff08;sleep mode&#xff09;3.2 停机模式&#xff08;stop mode&#xff09;3.3 待机模式&#xff08;standby mode&#xff09;4 寄存器及库函数介绍小实验&#xff1a;低功耗实验1 什…

作者头像 李华
网站建设 2026/7/12 14:24:41

协议认知论视域下:程序设计、网络安全与数据挖掘的三维融合

本文以“协议认知论”为核心框架&#xff0c;突破了传统网络研究中“协议、安全、编程”相互割裂的视角&#xff0c;创新性地提出了“认知-代码-攻防”三位一体的融合模型。通过解构协议作为“人类认知规则的数字化界面”这一本质&#xff0c;本文论证了以下核心观点&#xff1…

作者头像 李华
网站建设 2026/7/11 18:50:06

计算机Java毕设实战-基于springboot高校教务管理系统设计与实现基于SpringBoot学校教务管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华