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

Springboot使用登录拦截器LoginInteceptor来做登录认证

创建拦截器LoginInteceptor类

interceptors/LoginInteceptor.java

package org.example.interceptors;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.example.utils.JwtUtil;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import java.util.Map;@Component  // 注册为bean
public class LoginInteceptor implements HandlerInterceptor {// 拦截器逻辑@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 获取请求头中的tokenString token = request.getHeader("Authorization");// 验证tokentry {Map<String, Object> claims = JwtUtil.parseToken(token); // 解析tokenreturn true;    // 放行} catch (Exception e) {// http响应码为401response.setStatus(401);return false;   // 拦截}}
}

注册拦截器

config/WebConfig.java

package org.example.config;import org.example.interceptors.LoginInteceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration   // 注册为bean
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInteceptor loginInterceptor;// 放行登录接口和注册接口@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login", "/user/register");}
}

使用

controller/ArticleController.java

package org.example.controller;import org.example.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/article")
public class ArticleController {@RequestMapping("/list")public Result<String> list() {return Result.success("获取文章列表成功");}
}
http://www.dtcms.com/a/164604.html

相关文章:

  • Python类的力量:第一篇:数据组织革命——用类替代“临时数据结构”
  • 6.3 数据分析与决策支持:数据洞察生成与决策辅助系统
  • EPSG的作用
  • 【LaTex】3.8流程图绘制
  • 水利三维可视化平台怎么做?快速上手的3步指南
  • AI日报 - 2025年04月30日
  • 【C++游戏引擎开发】第29篇:物理引擎(Bullet)—刚体动力学系统
  • C++:Lambda表达式
  • MS2111多点低压差分(M-LVDS)线路驱动器和接收器
  • __proto__与prototype
  • NFS-网络文件系统
  • 域名与DNS理解
  • 基于Springboot + vue实现的列书单读书平台
  • OVP UVP与UVLO对比
  • 【办公类-89-03】20250429AI写的研讨记录,清除格式,统一格式,名字替换。部分加粗,添加页眉
  • Leetcode 3528. Unit Conversion I
  • MySQL 索引与事务详解
  • 在线文章系统自动化测试报告
  • 工业声纹采集设备的市场需求趋势简析
  • Qwen3 开源!深度对比 DeepSeek,一文选对模型
  • 巧记英语四级单词 Unit6-下【晓艳老师版】
  • 首发记忆行车方案与座舱智能管家,佑驾创新“抢跑”驾舱融合市场
  • GTC Taipei 2025 医疗域前瞻:从AI代理到医疗生态,解码医疗健康与生命科学的未来图景
  • CKA和CKS认证的介绍、学习、备考指南
  • 制作一款打飞机游戏30:动画系统
  • 业务层在事务中高频创建动态表然后删除或者回滚导致 pg_dump 概率出现备份失败问题分析
  • Python入门:流程控制练习
  • mmap核心原理和用途及其与内存映射段的关系
  • C++类与对象基础
  • FPGA 38 ,FPGA 网络通信协议栈基础,ARP 协议深度解析与模块划分( ARP与以太网帧,以及ARP模块常用文件 )