• SpringBoot-Web开发-拦截器


    目录

    一、拦截器的使用

    二、拦截器原理


    一、拦截器的使用

            拦截器可以拦截指定的请求,做相应的处理,比如做登录检查。

            使用方法:

            1.编写一个拦截器实现HandlerInterceptor接口

    1. public class LoginInterceptor implements HandlerInterceptor {
    2. //实现登录检查
    3. @Override
    4. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    5. HttpSession session=request.getSession();
    6. Object loginUser = session.getAttribute("loginUser");
    7. //session域中的loginUser是否为空?为空表示未登录
    8. if(loginUser!=null){
    9. return true;
    10. }
    11. //返回提示信息,转发至登录页
    12. request.setAttribute("msg","请先登录!");
    13. request.getRequestDispatcher("/login").forward(request,response);
    14. return false;
    15. }
    16. }

            2.拦截器注册容器中(实现WebMvcConfigurer的addInterceptors

    1. @Configuration
    2. public class myConfig implements WebMvcConfigurer {
    3. @Override
    4. public void addInterceptors(InterceptorRegistry registry) {
    5. //设定拦截规则,拦截除登录、静态资源外的所有请求
    6. registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/login","/css/**","/fonts/**","/js/**");
    7. }
    8. }

            3.指定拦截规则【如果是拦截所有,静态资源也会被拦截,所以要排除掉】

    二、拦截器原理

     

    1、根据当前请求,找到HandlerExecutionChain可以处理请求的handler以及handler的所有拦截器

    2、按顺序执行 所有拦截器的 preHandle方法

    • 1、如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle
    • 2、如果当前拦截器返回为false。直接倒序执行所有已经执行了拦截器afterCompletion

    3、如果任何一个拦截器返回false。直接跳出不执行目标方法

    4、所有拦截器都返回True执行目标方法

    5、倒序执行所有拦截器的postHandle方法。

    6、前面的步骤有任何异常都会直接倒序触发 afterCompletion

    7、页面成功渲染完成以后,也会倒序触发 afterCompletion

  • 相关阅读:
    这么高颜值的Kubernetes管理工具Lens,难道还不能C位出道吗
    跟李沐学AI-深度学习课程05线性代数
    Android学习笔记 13. TableLayout 表格布局
    电脑如何录屏?推荐3个方法
    Spring-Web - 数据库 字段加密 解密
    【解密ChatGPT】:从过去到未来,揭示其发展与变革
    【Ubuntu上使用git链接私人仓库】
    张瑞敏荣登世界管理思想家名人堂
    第十三章:AQS
    Nginx网站服务(nginx监控模块vts、nginx配置文件介绍、nginx多种访问配置)
  • 原文地址:https://blog.csdn.net/weixin_62427168/article/details/126155398