Springboot实现简单JWT登录鉴权
登录为啥需要鉴权?
登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token)来标识用户的身份。
鉴权的主要目的是确保只有经过身份验证的用户才能访问系统的受限资源和功能。未经鉴权的用户不能访问系统的敏感信息和功能,从而保护系统的数据和用户的隐私。
为什么选择JWT做登录鉴权?
选择 JWT(JSON Web Token)做登录鉴权有以下几个主要优点:
1.无状态
JWT 是无状态的,即服务端不需要保存用户的登录状态。所有的用户信息都包含在 JWT 中,因此服务端不需要在后台存储用户的登录信息。这样可以降低服务端的存储压力,也减少了服务端与客户端之间的通信次数,提高了系统的性能和可扩展性。
2.安全性
JWT 使用数字签名来保证 Token 的完整性和安全性。服务端在生成 JWT 时使用密钥对头部和载荷进行签名,客户端在接收到 JWT 后,可以通过验证签名来判断 Token 是否被篡改。这样可以防止 Token 被伪造或篡改,增强了系统的安全性。
3.跨平台支持
JWT 是基于 JSON 格式的标准化令牌,可以在不同平台之间方便地传递和解析。客户端可以将 JWT 存储在 Cookie、LocalStorage 或 SessionStorage 中,同时可以在移动端和 Web 端之间共享使用。
4.可扩展性
JWT 载荷部分可以自定义,可以存储用户的角色、权限、自定义字段等信息。这样可以在 Token 中携带更多的用户信息,减少多次查询数据库的开销,提高系统的性能。
5.简化权限管理
JWT 中可以包含用户的角色和权限信息,这样可以简化权限管理逻辑。服务端可以根据用户的角色和权限来控制用户对不同资源的访问权限,从而实现细粒度的权限控制。
JWT是token吗?
是的,JWT(JSON Web Token)是一种 Token 的实现方式。Token 是一种用于身份验证和授权的令牌,用于在客户端和服务端之间传递用户的身份信息。
JWT 是一种基于 JSON 的安全令牌,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。这三部分分别使用 Base64 编码,并用点号连接起来,形成一个字符串,即 JWT。
实现一个简单的springboot拦截器token例子
1.创建拦截器类 TokenInterceptor.java:
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TokenInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在这里进行 Token 鉴权逻辑// 获取请求头中的 TokenString token = request.getHeader("Authorization");if (token == null || !token.startsWith("Bearer ")) {response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return false;}// 假设这里对 Token 进行验证,验证通过则放行,否则返回 401 未授权状态码// 这里只是简单示例,实际中可以根据业务需求来验证 Token 的有效性boolean isValidToken = validateToken(token.substring(7)); // 去除 "Bearer " 前缀if (!isValidToken) {response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return false;}return true;}private boolean validateToken(String token) {// 假设这里对 Token 进行验证,验证通过返回 true,否则返回 false// 可以使用 JwtUtils 工具类来验证 Token 的有效性// 注意:在实际应用中,需要根据业务需求和安全要求来验证 Tokenreturn true;}
}
2.注册拦截器:
在 Spring Boot 主类中注册拦截器,使其生效:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@SpringBootApplication
public class MyApplication implements WebMvcConfigurer {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TokenInterceptor()).addPathPatterns("/api/**"); // 拦截指定路径的请求}
}
3.创建一个简单的 Controller
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/api/hello")public String hello() {return "Hello, World!";}
}相关文章:
Springboot实现简单JWT登录鉴权
登录为啥需要鉴权? 登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token&am…...
C++设计模式创建型之工厂模式整理
一、工厂模式分类 工厂模式属于创建型模式,一般可以细分为简单工厂模式、工厂模式和抽象工厂模式。每种都有不同的特色和应用场景。 二、工厂模式详情 1、简单工厂模式 1)概述 简单工厂模式相对来说,在四人组写的《设计模式------可复用面…...
前端安全XSS和CSRF讲解
文章目录 XSSXSS攻击原理常见的攻击方式预防措施 CSRFCSRF攻击原理常见攻击情景预防措施: CSRF和XSS的区别 XSS 全称Cross Site Scripting,名为跨站脚本攻击。为啥不是单词第一个字母组合CSS,大概率与样式名称css进行区分。 XSS攻击原理 不…...
本地化部署自建类ChatGPT服务远程访问
本地化部署自建类ChatGPT服务远程访问 文章目录 本地化部署自建类ChatGPT服务远程访问前言系统环境1. 安装Text generation web UI2.安装依赖3. 安装语言模型4. 启动5. 安装cpolar 内网穿透6. 创建公网地址7. 公网访问8. 固定公网地址 🍀小结🍀 前言 Te…...
一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)
概念与功能: webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手:隔行变色 -S实际是--save的简写,表示安装的第三方…...
安全防御(3)
1.总结当堂NAT与双机热备原理,形成思维导图 2.完成课堂nat与双机热备试验 引用IDS是指入侵检测系统,它可以在网络中检测和防御入侵行为。IDS的签名是指根据已知入侵行为的特征制定的规则,用于检测和警告可能存在的入侵行为。签名过滤器可以根…...
AR远程专家指导在汽车改装上的应用有哪些?
随着科技的不断发展,AR增强现实技术逐渐走进了我们的生活。加上商贸国际化,远程协同纵深到制造生产的更多环节,研发协同、工艺优化等场景复杂、跨层级、需要频繁沟通确认的流程正通过AR应用实现全面远程化的过渡,在汽车行业&#…...
css-3:什么是响应式设计?响应式的原理是什么?如何做?
1、响应式设计是什么? 响应式网站设计(Responsive WEB desgin)是一个网络页面设计布局,页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的相应和调整。 描述响应式…...
Armstrong数,n位数等于其各位数的n次方之和。
//Armstrong数具有以下特征:一个n位数等于其各位数的n次方之和。 //例如:1531^35^33^3 16341^46^43^44^4 #include<stdio.h> #include<math.h> //实在不知道的暴力求解方法 int main() {//Armstrong数具有以下特征:一个…...
blender的下载安装和配置中文环境
引言 在3D建模和动画设计领域,Blender 作为一款强大且免费的开源软件,一直以优秀的性能和对众多技术的支持赢得了大批用户的喜爱。然而,对于刚接触这款软件的用户而言,其安装和配置过程可能会带来一定困扰,尤其是在设…...
MyCat配置rule.xml、server.xml讲解
1. rule.xml分片规则配置文件 rule.xml中配置的主要就是拆分表的规则,rule.xml中主要包含两类标签 tableRule 和Function。 tableRule标签里面主要配置我们的分片规则,Function里面涉及的是分片规则里面所涉及的java类,都是在function中配置…...
Linux项目部署
目录 一JAVAWeb环境的部署【安装JDK,MySQL数据库,Tomcat】 二.手工部署SpringBoot项目(写的最好的) 1.在IDEA中开发SpringBoot项目并打成jar包--点击右侧的Maven执行package命令 2.将jar包上传到Linux服务器 3.执行以下命令&a…...
案例:Docker 镜像的创建及使用(commit与dockerfile方式)
文章目录 1、commit方式创建镜像1.1、前期准备1.2、制成镜像1.3、启动镜像1.3.1、启动镜像启动nginx1.3.2、一个命令直接全部启动1.3.3、两种方式区别 1.4、commit创建镜像方式的本质 2、Dockerfile的使用2.1、Dockerfile指令2.2、nginx镜像制作案例2.3、查看构建历史ÿ…...
QGIS二次开发三:显示Shapefile
Shapefile 为 OGR 所支持的最重要的数据格式之一,自然可以被 QGIS 加载。那么该如何显示Shapefile呢? 一、先上代码 #include <qgsapplication.h> #include <qgsproviderregistry.h> #include <qgsmapcanvas.h> #include <qgsvec…...
FFmpeg中相关结构体介绍
AVFormatContext:此结构体存储音视频封装格式中包含的信息,并且这个结构体是贯穿整个播放流程的。在这个结构体中主要包含AVInputFormat,AVOutputFormat、AVStream等。 struct AVInputFormat *iformat; // 输入数据的封装格式 AVIOContext *…...
Llama 2 云端部署与API调用【AWS SageMaker】
Meta 刚刚发布了 Llama 2 大模型。如果你和我们一样,你一定会迫不及待地想要亲自动手并用它来构建。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 使用任何类型的 LLM 进行构建的第一步是将其托管在某处并通过 API 使用它。 然后你的开发人员可以轻松地将…...
根文件系统制作
1.官网下载工具 制作工具:busybox https://busybox.net/downloads/ 2.制作根文件系统 2.1准备工作 a.把压缩包放在FSP1M目录下,并解压 2.2正式开始 2.2.1配置交叉编译工具链 1. 打开Makefile文件 2. 修改ARCH ?$(SUBARCH) …...
Linux ARM64架构 动态替换 altinstructions
文章目录 简介一、altinstructions节1.1 .altinstructions1.2 .rela.altinstructions 二、内核模块重定位源码分析参考资料 简介 在内核开发中,有时需要对内核代码进行修补,以解决bug、优化性能或引入新功能。替代指令(altinstructions&…...
Mac显示隐藏文件夹
1、设置隐藏文件可见 defaults write com.apple.finder AppleShowAllFiles TRUE 2、killall Finder killall Finder...
使用 Habana Gaudi2 加速视觉语言模型 BridgeTower
🤗 宝子们可以戳 阅读原文 查看文中所有的外部链接哟! 在对最先进的视觉语言模型 BridgeTower 进行微调时,使用 Optimum Habana v1.6, Habana Gaudi2 可以达到 近 3 倍于 A100 的速度。硬件加速的数据加载以及 fast DDP 这两个新特…...
ARM架构CPACR与SCR寄存器详解与应用
1. ARM架构系统控制寄存器概述在ARMv8/v7架构中,系统控制寄存器(System Control Registers)是处理器核心功能配置的关键组件,它们直接控制着处理器的运行状态、安全机制和硬件资源访问权限。这些寄存器通常通过协处理器CP15进行访问(在AArch3…...
企业内部分享Taotoken在代码审查与生成场景下的应用实践
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内部分享Taotoken在代码审查与生成场景下的应用实践 在软件开发团队中,代码审查与代码生成是提升代码质量、保障项…...
PlayAI多语种同步翻译实测报告:98.7%端到端准确率、<320ms平均延迟,如何在12种语言间零感知切换?
更多请点击: https://intelliparadigm.com 第一章:PlayAI多语种同步翻译功能详解 PlayAI 的多语种同步翻译功能基于端到端神经机器翻译(NMT)架构与实时语音流处理引擎深度融合,支持中、英、日、韩、法、西、德、俄等 …...
churrera-cli:Go语言开发的Git仓库批量克隆与自动化管理工具
1. 项目概述:一个为开发者“挤奶油”的命令行工具如果你是一名经常与GitHub、GitLab等代码托管平台打交道的开发者,那么你一定对“克隆仓库”这个动作再熟悉不过了。每天,我们可能都需要从不同的地方拉取代码库,无论是为了学习、复…...
初创团队如何借助 Taotoken 的 Token Plan 有效控制大模型使用成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何借助 Taotoken 的 Token Plan 有效控制大模型使用成本 对于初创团队和独立开发者而言,在项目早期验证想法…...
数据可视化:使用D3.js创建交互式图表
数据可视化:使用D3.js创建交互式图表 大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊数据可视化这个话题。作为一个全栈开发者,我经常需要将复杂的数据以直观的方式展示给用户。D3.js是一个功能强大的数据可视化库&am…...
终极指南:Spring事务传播机制详解——7种行为+实战案例
终极指南:Spring事务传播机制详解——7种行为实战案例 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果…...
多尺度地理加权回归(MGWR)终极指南:从入门到实战的完整教程
多尺度地理加权回归(MGWR)终极指南:从入门到实战的完整教程 【免费下载链接】mgwr Multiscale Geographically Weighted Regression (MGWR) 项目地址: https://gitcode.com/gh_mirrors/mg/mgwr 面对复杂多变的空间数据,传统的地理加权回归(GWR)常…...
FPGA与以太网:从MII接口到UDP通信的实战解析
1. 以太网通信与FPGA开发入门 第一次接触FPGA以太网开发时,我被各种专业术语搞得晕头转向。MII、PHY、MAC、UDP这些名词像天书一样,直到真正动手做了一个数据采集项目才豁然开朗。以太网通信看似复杂,其实拆解开来就是硬件接口协议栈数据处理…...
AP的全称是什么?
AP 的全称是 Access Point。 中文常叫 无线接入点 或 无线 AP,一般指 Wi‑Fi 路由器 / 热点 里负责 让手机、笔记本、POS 等无线接入局域网 的那一部分(有时也整台设备被口语叫成 AP)。 在你们文档里 「Connect the LAN port … to an AP r…...
