三、SpringMVC的拦截器
创始人
2024-05-30 18:58:14
0

1. SpringMVC的拦截器

针对请求和响应进行的额外的处理.在请求和响应的过程中添加预处理,后处理和最终处理.

2. 拦截器的应用场景

1、日志记录:记录请求信息的日志
2、权限检查,如登录检查
3、性能检测:检测方法的执行时间

在这里插入图片描述

3. 拦截器执行的时机

  1. preHandle():在请求被处理之前进行操作,预处理
  2. postHandle():在请求被处理之后,但结果还没有渲染前进行操作,可以改变响应结果,后处理
  3. afterCompletion:所有的请求响应结束后执行善后工作,清理对象,关闭资源 ,最终处理.

4. 拦截器实现的两种方式

  1. 继承HandlerInterceptorAdapter的父类
  2. 实现HandlerInterceptor接口,实现的接口,推荐使用实现接口的方式

HandlerInterceptor接口分析

自定义拦截器,需要实现 HandlerInterceptor 接口。而该接口中含有三个方法:

(1) preHandle
该方法在处理器方法执行之前执行。其返回值为 boolean,若为 true,则紧接着会执行处理器方法,且会将 afterCompletion()方法放入到一个专门的方法栈中等待执行。

(2) postHandle
该方法在处理器方法执行之后执行。处理器方法若最终未被执行,则该方法不会执行。由于该方法是在处理器方法执行完后执行,且该方法参数中包含 ModelAndView,所以该方法可以修改处理器方法的处理结果数据,且可以修改跳转方向。

(3)afterCompletion
当preHandle()方法返回 true 时,会将该方法放到专门的方法栈中,等到对请求进行响应的所有工作完成之后才执行该方法。即该方法是在中央调度器渲染(数据填充)了响应页面之后执行的,此时对 ModelAndView 再操作也对响应无济于事。afterCompletion 最后执行的方法,清除资源,例如在 Controller 方法中加入数据等。

5.自定义拦截器实现权限验证

  1. 登录方法,在session中存储用户信息,用于进行权限验证

    // 登录的业务判断
    @RequestMapping("/login")
    public String login(String name, String pwd, HttpServletRequest request){if ("admin".equalsIgnoreCase(name) && "123".equalsIgnoreCase(pwd)){// 在session中存储用户信息,用于进行权限验证request.getSession().setAttribute("user", name);return "main";}else {request.setAttribute("msg", "用户名或密码不正确");return "login";}
    }
    
  2. 开发拦截器的功能.实现HandlerInterceptor接口,重写preHandle()方法

    package com.powernode.interceptor;import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.HandlerInterceptor;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 判断是否登录过if (request.getSession().getAttribute("user") == null){// 没有登录,返回登录页面request.setAttribute("msg","请登录");request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);return false;}return true;}
    }
    
  3. 在springmvc.xml文件中注册拦截器

    
    
    
    

相关内容

热门资讯

高步岭下 南溪河边是我们可爱的... 高步岭下 南溪河边是我们可爱的美丽校园这是什么歌致命的甜蜜 - 孙子涵词:孙子涵曲:孙子涵纷飞的落英...
【苹果】iPhone17Pro... 此前消息称今年秋季的iPhone 17系列或带来iPhone 17、17 Air(取代原先的Plus...
与辉同行开新号!新公司由董宇辉... 7月4日,@与辉同行 发文:“【兰知春序】抖音账号特别推出《主创请开麦》节目!”据悉,该栏目将以电影...
贺州工匠李柱乐:以手传艺,以心... 转自:广西贺州政府网贺州工匠:李柱乐李柱乐,他一直致力于推拿按摩技艺与现代医学理论相结合,不仅在传统...
乌证实打击俄无人机战斗部件生产... 来源:央视新闻客户端乌克兰武装部队总参谋部4日证实,对俄罗斯一家生产无人机战斗部件的企业实施了打击。...
忠孝东路走九遍的歌曲MV 忠孝东路走九遍的歌曲MV这首歌曲的MV主角则是由行逗握香港演员陈键档庆锋担任,他巧妙的还原了故事的真...
特朗普关税政策重创美国哪些地区... 受影响最严重的州中,超过一半在上次美国大选中投票支持美国总统特朗普。 谁在承担特朗普关税政策的成本?...
五洲医疗:股东张洪瑜及其一致行... 五洲医疗公告,信息披露义务人张洪瑜的一致行动协议到期不再续签,所持有公司的股份不再合并计算。本次权益...
“海峡两岸智能医学联合实验室”... 中新社武汉7月4日电 (记者 武一力)海峡两岸(武汉)人工智能产业合作交流会4日在武汉举行。会上,湖...
柳化股份(600423.SH)... 格隆汇7月4日丨柳化股份(600423.SH)公布,根据建行广西分行、建信金租出具的《柳州化工股份有...