江门企业网站建设公司两学一做 官方网站

web/2025/10/7 17:40:07/文章来源:
江门企业网站建设公司,两学一做 官方网站,港南网站建设,厦门电商网站建设为实现Jwt简单的权限管理#xff0c;我们需要用Jwt工具来生成token#xff0c;也需要用Jwt来解码token#xff0c;同时需要添加Jwt拦截器来决定放行还是拦截。下面来实现#xff1a; 1、gradle引入Jwt、hutool插件 implementation com.auth0:java-jwt:3.10.3implementatio…为实现Jwt简单的权限管理我们需要用Jwt工具来生成token也需要用Jwt来解码token同时需要添加Jwt拦截器来决定放行还是拦截。下面来实现 1、gradle引入Jwt、hutool插件 implementation com.auth0:java-jwt:3.10.3implementation cn.hutool:hutool-all:5.3.72、Jwt工具类提供静态方法生成token和根据请求携带的token查找user信息 package com.zzz.simple_blog_backend.utils;import ......Component public class JwtTokenUtils {Autowiredprivate UserService userService;private static UserService userServiceStatic;PostConstruct//在spring容器初始化后执行该方法public void setUserService() {userServiceStatic userService;}//生成Tokenpublic static String genToken(String userId,String passwordSign) {return JWT.create().withAudience(userId)//放入载荷.withExpiresAt(DateUtil.offsetHour(new Date(), 2))//2小时后过期.sign(Algorithm.HMAC256(passwordSign));//密码签名作为密钥}//通过token获取当前登录用户信息public static User getCurrentUser() {String token null;HttpServletRequest request ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();//1、获取tokentoken request.getHeader(token);if (StrUtil.isBlank(token)) {token request.getParameter(token);}if (StrUtil.isBlank(token)) {throw new RuntimeException(没有token请重新登录);}String userId;User user;try {userId JWT.decode(token).getAudience().get(0);} catch (Exception e) {throw new RuntimeException(token验证失败请重新登录);}user userServiceStatic.findById(Integer.parseInt(userId));if(usernull) {throw new RuntimeException(用户id不存在请重新登录);}//3、用密码签名解码判断tokentry {JWTVerifier jwtVerifier JWT.require(Algorithm.HMAC256(user.getPassword())).build();jwtVerifier.verify(token);} catch (JWTVerificationException e) {throw new CustomException(001, token验证失败请重新登录);}return user;} }3、Jwt拦截器 SpringBoot添加拦截器excludePathPatterns可以指定不拦截的页面RestController指定了请求前缀控制器类要用RestController代替ControlleraddInterceptor添加了jwtInterceptor拦截器。 package com.zzz.simple_blog_backend.config;import ...Configuration public class WebConfig implements WebMvcConfigurer{Autowiredprivate JwtInterceptor jwtInterceptor;Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {//指定restcontroller统一接口前缀configurer.addPathPrefix(/api, clazz - clazz.isAnnotationPresent(RestController.class));}Overridepublic void addInterceptors(InterceptorRegistry registry) {// 加自定义拦截器 给特定请求放行registry.addInterceptor(jwtInterceptor).addPathPatterns(/api/**).excludePathPatterns(/api/user/login,/api/user/register);} }仔细的童靴会发现JwtTokenUtils.getCurrentUser()方法和JwtInterceptor的拦截方法很像主要区别就在if(user.getRole()!0)的判断。所以JwtInterceptor只会给管理员放行如果需要给普通用户放行而未登录用户不放行那请求路径先添加到excludePathPatterns并且控制类对应的响应方法第一句就先调用JwtTokenUtils.getCurrentUser()判断是否用户已登录。 package com.zzz.simple_blog_backend.config;import ......Component public class JwtInterceptor implements HandlerInterceptor{Autowiredprivate UserService userService;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {//1、获取tokenString token request.getHeader(token);if (StrUtil.isBlank(token)) {token request.getParameter(token);}if (StrUtil.isBlank(token)) {throw new RuntimeException(没有token请重新登录);}//2、开始认证 解码token获得userIdString userId;User user;try {userId JWT.decode(token).getAudience().get(0);} catch (Exception e) {throw new RuntimeException(token验证失败请重新登录);}user userService.findById(Integer.parseInt(userId));if(usernull) {throw new RuntimeException(用户id不存在请重新登录);}if(user.getRole()!0) {throw new RuntimeException(非管理员账号无权访问);}//3、用密码签名解码判断tokentry {JWTVerifier jwtVerifier JWT.require(Algorithm.HMAC256(user.getPassword())).build();jwtVerifier.verify(token);} catch (JWTVerificationException e) {throw new RuntimeException(token验证失败请重新登录);}//token验证成功放行return true; // return HandlerInterceptor.super.preHandle(request, response, handler);} }4、前后端登录操作 登录后 后端返回带token不带密码的user数据 PostMapping(user/login)ResponseBodypublic CommonResultObject login(RequestBody User user){user userService.findByUsernameAndPassword(user);if (user null) {return CommonResult.failed(001, Message.createMessage(用户名或密码错误));} else {//生成用户对应的TokenString token JwtTokenUtils.genToken(user.getId().toString(), user.getPassword());user.setToken(token);//不传输密码user.setPassword();return CommonResult.success(user);}}前端保存带token的user //axios的post请求成功后操作localStorage.setItem(user,JSON.stringify(response.data.data));//保存用户信息5、前端每次请求都携带token信息 假设已安装axiosAxios.interceptors.request拦截用户所有请求添加token信息后再发送请求这样后端就可以判断了。 import Axios from axiosVue.prototype.$http Axios; //添加向后端发起请求的服务器地址前缀 Axios.defaults.baseURLAIOS_BASE_URL; // http://127.0.0.1/api //设置请求超时时间 Axios.defaults.timeout5000;//axios拦截器 //对接口request拦截 Axios.interceptors.request.use(function(config){//发起增删改查请求时带上token认证var user localStorage.getItem(user);if(user){config.headers[token] JSON.parse(user).token;}return config; }) //携带证书 session id 跨域请求的话需要 Axios.defaults.withCredentials true总结 Jwt实现权限管理的原理是登录成功后 后端端生成token密钥随着用户信息发送给客户端客户端接受并保存信息到本地localStorage。以后每次需要权限验证时根据客户端返回的携带token信息后端进行拦截并解码校验通过则放行否则抛异常。如果要抛异常时返回错误信息给前端请看链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分析对手网站的优化方法网站建设 化工

题目:给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 我的代码: 对撞指针 class Solution {public int[] twoSum(int[] numbers, int target) {int low 0;//指向头int high numbers.le…

佛山免费建站怎样个人建设网站还要备案么

转载自 Java IO: InputStreamReader和OutputStreamWriter作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本章节将简要介绍InputStreamReader和OutputStreamWriter。细心的读者可能会发现,在之前的文章中,IO中的类要么以Stream结尾&#xff0c…

网站开发的工作内容深圳网站制作公司电话

机电一体化专业英语宋主民章第 3 章 中间转换电路3.1 前言传感器在测量系统中是把所测的机械信号转换为电量的一次仪表。这些电量可能是所用元件的电阻、电容或电感参数的变化,需要用电桥将它们转换为电压或电流信号。另一方面,实际上由一次仪表产生的电…

怎么创建免费自己的网站平台网站制作老了

文章目录 docker-compose命令启动单个容器重启容器停止和启动容器停止和启动所有容器演示一个简单示范 docker-compose 部署有依赖问题 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您使用简单的 YAML 文件来配置应用程序的服务、网络和存储等方…

网站生成pc应用网络推广营销方案免费

事件与事件流 事件,这里指和网页进行互动。比如点击链接,移动鼠标等网页被触发,做出响应,形成交互。 js 采用事件监听器来监听事件是否发生。 事件流 事件流描述了从页面中接收事件的顺序。当一个事件发生在某个元素上时&…

色块设计网站自己做淘宝客网站

一.海康可见USB3.0工业面阵相机 海康usb相机需要去海康官网上下载对应系统的MVS客户端及SDK开发包 海康机器人-机器视觉-下载中心 选择Windows系统和unbtun(我是linux aarch64,所以选择了对应压缩包解压) Windows系统 1.双击安装包进入安装界面&…

做个网站 一般费用建设什么企业网站

目录 1.首先引入依赖2.main中配置注解3.src/main/resources/application.yml配置文件 本文的主要工作是介绍如何搭建一个Eureka服务 1.首先引入依赖 pom文件中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring…

天河网站建设系统网络广告视频

通信是指线程之间以何种机制来交换信息&#xff0c;同步是指程序中用于控制不同线程间操作发生相对顺序的机制 进程由线程组成&#xff0c;所以进程中有的通讯机制线程中全都有 线程的通讯方式&#xff1a; 1. 锁机制&#xff1a;包括互斥锁、条件变量、读写锁 互斥锁提供了以…

营销型网站费用赤峰北京网站建设

上一篇文章中提到了一个有趣的实验&#xff0c;简单来说就是1-100中有若干个数字是“正确的”&#xff0c;只告诉其中一部分“正确的”数字&#xff0c;去猜全部“正确的”数字。为了严谨的去研究这个问题&#xff0c;我们需要将一些概念进行抽象。首先&#xff0c;把提前告知的…

大连网站制作营销渠道模式有哪些

如果表中只有1行,则索引的基数当然应为1.它只是计算唯一值的数量.如果您将索引视为基于存储桶的查找表(如散列),则基数是存储桶的数量.以下是它的工作原理&#xff1a;当您在一组列(a,b,c,d)上构建索引时,数据库将遍历表中的所有行,查看每行的4个列的有序四元组.假设你的表看起…

行业网站制作公司网站制作源码

方案概述 人脸识别方案采用高性能AI芯片&#xff0c;支持RGB和IR摄像头&#xff0c; 支持LCD显示屏。方案特点 • 普通RGB摄像头和IR摄像头同时参与3D成像RGB摄像头 支持屏幕回显 • 双目摄像头得到特征点视差计算人脸相 对3D深度信息&#xff0c; 同时利用可见光和红外 光谱信…

静态网站开发步骤网站建设与实践高自考

鞅过程与马尔科夫过程是什么关系&#xff1f; 1.鞅代表的是公平游戏&#xff0c;马尔可夫过程侧重过程无记忆性 总而言之&#xff1a;鞅和马尔可夫过程没有包含的关系。因为鞅代表的是公平游戏&#xff0c;而马尔可夫过程侧重过程无记忆性。两者没有内在联系。 注&#xff1…

深圳住房和建设局网站 宝安常宁城乡建设局网站查询

E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c;以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位于小浪底水…

公司网站建设考核wordpress模板上传不

一、前言 postman是一款强大网页接口调试工具&#xff0c;我们在平时开发过程中经常会使用到&#xff0c;一般使用最多的是postman的客户端&#xff0c;实际上postman在谷歌浏览器上也提供了插件&#xff0c;可以不必要安装客户端进行接口测试工作。 建议更新到最新谷歌浏览器&…

网络网站推广优化百度网站搜索关键字

注射成型机(简称注射机或注塑机)是将热塑性塑料或热固性料利用塑料成型模具制成各种形状的塑料制品的主要成型设备。 注射成型是通过注塑机和模具来实现的。 注塑机通常由注射系统、合模系统、液压传达动系统、电气控制系统、润滑系统、加热及冷却系统、安全监测系统等组成。 注…

做食品的采购员常用网站网站之前没备案

RDMA编程实践 本文描述了RDMA编程过程中的SEND-RECEIVE双边原语的代码实现。包含多个版本&#xff0c;1、client向server发送消息&#xff0c;server回复client收到消息(ACK)&#xff0c;然后两边断开连接。2、server端循环等待客户端建立连接&#xff0c;client发送一次消息后…

电子商务书店网站设计实验门户网站 jsp

1 现象 用上海代数律动公司的AlgoT1-3组合导航设备采集数据进行组合导航算法调试&#xff0c;AlgoT1-3机器输出的结果很好很平滑&#xff0c;AlgoT1-3是带GNSS/INS的组合导航设备&#xff0c;另外还有一款更贵一点的带视觉的组合导航AlgoT1&#xff0c;效果会更好一些&#xf…

交互式网站开发苏州建站公司速找苏州聚尚网络

安装android studio到最后一步的时候遇见了这个问题 。 android studio安装详见Android Studio 安装 经过查阅多篇博客 把他们的解决方案放在一起一顿操作猛如虎&#xff0c;然后就成了。。。 2篇原文链接我放在这里&#xff1a; Android Studio新建工程时SDK缺少extra-an…

网站购买流程中国设计之家

在Java中生成PDF文件的缩略图可以使用Apache PDFBox库。以下是一个简单的示例代码来实现这个功能&#xff1a; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.tools.imageio.ImageIOUtil;import j…