当前位置: 首页 > article >正文

springMvc中的拦截器【巩固】

先实现下想要的拦截器功能

package com.hmdp.utils;

import com.hmdp.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


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 {
        //获取session
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if(user==null)
        {
            //不存在,拦截,返回401状态码
            response.setStatus(401);
            return false;
        }
        //保存信息到ThreadLocal
        UserHolder.saveUser((User) user);

        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //移除用户
        UserHolder.removeUser();
    }
}

配置拦截器:

/**
 * 拦截器
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .excludePathPatterns(
                        "/blog/hot",
                        "/user/code",
                        "user/login"
                );
    }
}

 @Configuration:当使用`@Configuration`注解标记一个类时,它表示该类是一个配置类,用于定义和配置Spring应用程序的组件和相关配置。

WebMvcConfigurer :是Spring MVC中的一个接口,它允许开发者自定义Spring MVC的某些特性。如果你想自定义Spring MVC而不是完全采用默认配置,那么你可以实现WebMvcConfigurer接口。例如,如果你想更改默认的视图解析器、消息转换器、拦截器等,你可以通过实现WebMvcConfigurer接口来完成。

.excludePathPatterns:这些接口不走拦截

.addInterceptor :是 WebMvcConfigurer 接口中的一个方法,它允许你添加自定义的拦截器(Interceptor)到 Spring MVC 的处理流程中。拦截器可以用于在请求处理之前或之后执行特定的逻辑,例如身份验证、日志记录、性能监控等。


http://www.kler.cn/a/132998.html

相关文章:

  • 微服务链路追踪skywalking安装
  • ollama+springboot ai+vue+elementUI整合
  • Godot的开发框架应当是什么样子的?
  • 后端总指挥---文件接口
  • 蓝队基础1
  • MySQL【五】
  • 爱上C语言:操作符详解(下)
  • 08-黑马点评项目发布笔记和查看笔记功能的实现
  • 微软Surface/Surface pro笔记本电脑进入bios界面
  • el-table中el-popover失效问题
  • Spring中用了哪些设计模式
  • 电子学会C/C++编程等级考试2021年12月(一级)真题解析
  • Stream流常见操作
  • 微信(小程序开发): 解决播放音乐没有声音的情况 代码不报错的情况下依旧没有声音的解决方案
  • vb.net 实时监控双门双向门禁控制板源代码
  • Michael Jordan最新报告:去中心化机器学习中的契约、不确定性和激励
  • 数据分析思维与模型:相关分析法
  • AIGC: 关于ChatGPT这个智能工具带来的几点思考
  • 【AI应用】 AI语音转换
  • STM32外部中断(EXTI)与RTOS多任务处理的协同设计
  • springBoot集成websocket实时消息推送
  • <MySQL> 什么是JDBC?如何使用JDBC进行编程?
  • 系列四、JVM的内存结构【本地接口(Native Interface)】
  • leecode | 数位和相等数对的最大和
  • 美国经典人工智能教材第3版出版!
  • 【shell 常用脚本30例】