web系统接口设计总结

news2024/11/15 17:41:28

一、前言

在前后端完全分离的开发模式或者说是架构模式下,后端开发者只需要编写后端接口,特别是restful风格接口更为常见。那么暴露给外面的接口大概有三个常见。1、给后台系统调用的接口,2、对客端应用的接口(APP或者H5页面),3、第三方系统调用接口。那么同一个系统下怎么保证接口的安全性。应该怎么设计,本节做一下子总结

二、token的制作

系统对外提供部分接口,为了保证软件数据的安全性,可以通过设置token令牌来校验请求方是否合法。 比较流行的JWT来实现。
实现步骤:客户端每次访问接口的时候,要在header中携带token令牌,然后在项目的拦截器中使用相应的策略配置拦截这些对外接口的请求(例如这一类接口的url统一配置为/api/开头),拦截到请求后从header中得到token进行校验,校验通过后即可放行。通过不了返回相应状态码,客户端得到状态码携带账号和密码向服务端申请token,服务端验证账号密码合法后生成token返回,token具有时效性。

三、实现token

引入依赖

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.4.0</version>
</dependency>

生成token与校验token

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;

public class TokenManager {

	//私钥
	private static final String SECRET = "Axmk89Li3Aji9M";

	//过期时间1分钟
	private static final int expiresTime = 60000;
	
	public static String createToken(Long userId){
		//获取加上过期时间后的时间
		Date nowDate = new Date();
		System.out.println(nowDate);
		Date expiresDate = new Date(System.currentTimeMillis()+expiresTime);
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("alg", "HS256");
		map.put("typ", "JWT");
		String token = JWT.create().withHeader(map)	//请求头
		.withClaim("iss", "Service")	//签发方
		.withClaim("aud", "Client")		//接收方
		.withClaim("userId", null==userId?null:userId.longValue()) //存储信息,用户ID
		.withIssuedAt(nowDate)		//当前时间
		.withExpiresAt(expiresDate)		//过期时间
		.sign(Algorithm.HMAC256(SECRET));		//私钥
		
		return token;
	}
	
	public static boolean verifyToken(String token){
		try{
			JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
			verifier.verify(token);
			//DecodedJWT verify = verifier.verify(token);
			//return verify.getClaims();	//能返回数据集合(用于在jwt中存储一些数据)的,但是由于这一版本只需要核验token是否合法,所以只需要返回true和false;
			return true;
		}catch(Exception e){
			log.error(e.getMessage(), e);
			return false;
		}
	}
}

四、校验接口

当然获取token的接口不需要token,可以直接请求,只是系统双方会约定获取token的参数,涉及到账号,秘钥之类的,还有传输参数涉及的加密方式。

我们可以通过编写过滤器来校验传过来的接口和携带的token


        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        
        String path = request.getURI().getPath();

        if (pathMatcher(resourceUrl, path)) {
            return chain.filter(exchange);
        }
        response.getHeaders().setContentType(MediaType.APPLICATION_JSON);

        //获取token
        String token=  request.getHeaders().getFirst("token");

 

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

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

相关文章

Linux文件-内存映射mmap

mmap定义为&#xff1a;Linux通过将一个虚拟内存区域与一个磁盘上的对象(object)关联起来&#xff0c;以初始化这个虚拟内存区域的内容&#xff0c;这个过程称为内存映射(memory mapping)。 在LINUX中我们可以使用mmap用来在进程虚拟内存地址空间中分配地址空间&#xff0c;创…

如何成为CISP信息安全专业人员

随着信息技术和经济社会的交汇融合&#xff0c;网络安全一跃成为国家最为关注的焦点之一。 对于网络安全行业的资质证书来说&#xff0c;CISP成为了目前从业人员最为关注和了解的证书之一&#xff0c;那么&#xff0c;在网络安全行业&#xff0c;CISP证书的价值究竟在哪里&…

MBBF展示的奇迹绿洲:5G的过去、此刻与未来

如果你来迪拜&#xff0c;一定不会错过全世界面积最大的人工岛项目&#xff0c;这是被称为世界第八大奇迹的棕榈岛。多年以来&#xff0c;这座岛从一片砂石、一棵棕榈树开始&#xff0c;逐步建成了整个波斯湾地区的地标&#xff0c;吸引着全世界游人的脚步。 纵观整个移动通信发…

国际前十伦敦金交易app软件最新排行榜(信息汇总)

随着科技的发展&#xff0c;移动交易已成为的趋势。伦敦金交易也不再局限于桌面&#xff0c;而是越来越多地转移到手机上。 为了更好地展现软件的信息&#xff0c;本文将为大家介绍国际前十的伦敦金交易app软件最新排行榜。 1.金荣中国 金荣中国是知名的伦敦金交易平台&…

Maven导入程序包jakarta.servlet,但显示不存在

使用前提&#xff1a;&#xff08;Tomcat10版本&#xff09;已知tomcat10版本之后&#xff0c;使用jakart.servlet。而tomcat9以及之前使用javax.servlet。 问题描述&#xff1a;在maven仓库有导入了Jakarta程序包&#xff0c;但是界面仍然显示是javax。&#xff08;下图&…

基于VCO的OTA稳定性分析的零交叉时差模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux编译FFmpeg

Linux编译FFmpeg 1. 下载FFmpeg源码 FFmpeg源码下载地址&#xff1a;http://ffmpeg.org/download.html 在下面选择版本 2. 解压并创建生成目录 tar xvf ffmpeg-snapshot.tar.bz2 // 解压下载的FFmpeg源码 makedir /root/ffmpeg // 创建生成目录3. 编译FFmpeg 进入FF…

详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心的解决方案

1.概述 1.1 Zookeeper是什么&#xff1f; Zookeeper: 直译过来是动物园管理员的意思&#xff0c;这里的动物表示的就是当下主流的众多框架组件(ps&#xff1a;现在的框架组件都喜欢用动物当图标)&#xff0c;而Zookeeper的图标如下图所示&#xff0c;是一个人拿着一个铲子(铲…

Python学习笔记-使用哈希算法Hash,Hashlib进行数据加密

文章目录 一、概述1.1 哈希算法1.2 常见算法分类1.2.1 SHA算法1.2.2 MD4算法1.2.3 MD5算法 1.3 Hash算法的特性1.4 Hash算法的应用场景1.4.1 数据校验1.4.2 安全加密1.4.3 数字签名 二、Hash算法使用2.1 使用hash函数直接获取hash值2.2 使用hashlib库进行hash计算2.2.1 基本使用…

解决Win10电脑无线网卡的移动热点无法开启问题

一、目的 利用无线网卡连接网络&#xff0c;然后又用无线网卡通过移动热点分享该网络。 移动热点&#xff0c;简单地说&#xff0c;就是将台式机或笔记本的 Internet 连接转化成 WIFI 信号以供移动设备无线上网的功能&#xff0c;硬件前提是电脑须安装有无线网卡。 二、问题 …

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法 1、最近邻插值法 1、最近邻插值法 *最邻近插值&#xff1a;将每个目标像素找到距离它最近的原图像素点&#xff0c;然后将该像素的值直接赋值给目标像素 优点&#xff1a;实现简单&#xff0c;计算速度快缺点&…

运维少背锅? 7 种常见监控工具,你是否用过?

运维监控工具千千万&#xff0c;仅开源的解决方案就有流量监控&#xff08;MRTG、Cacti、SmokePing、Graphite等&#xff09;和性能告警&#xff08;Nagios、Zabbix、Zenoss Core、Ganglia、OpenTSDB等&#xff09;可供选择。 并且每种软件都有自己的特点和功能&#xff0c;各…

OpenCV4(C++)——模板匹配

matchTemplate 模板匹配和卷积运算大致相同&#xff0c;模板图类似于卷积核&#xff0c;从原图的左上角开始进行滑动窗口的操作&#xff0c;最后得到一个特征图&#xff0c;这个特征图里的数值就是每次计算得到的相似度&#xff0c;通用匹配方式&#xff0c;相似值是&#xff…

【博客搭建】1、拾壹博客本地启动遇到的问题和需要注意的坑

一、后端&#xff08;blog&#xff09;启动 1、修改application.yml中的数据库链接与密码&#xff0c;Redis账号密码&#xff0c;即可启动成功&#xff1b; 2、运行之前先导入sql&#xff1b; 3、 如需上传文件保存至本地&#xff08;例如相册的照片&#xff09;&#xff0c;需…

Verilog功能模块——异步FIFO

前言 FIFO的功能 FIFO在FPGA中应用很多&#xff0c;它主要有以下功能&#xff1a; 数据缓存&#xff0c;很多时候数据发送速度和数据接收速度并不实时匹配&#xff0c;而在其中插入一个FIFO&#xff0c;来临时存储数据&#xff0c;就能平衡发送和接收速度组合与分解数据&…

什么是系统架构师?什么是系统架构?

1. 什么是系统架构师&#xff1f; 系统架构设计师(System Architecture Designer&#xff09;是项目开发活动中的关键角色之一。系统架构是系统的一种整体的高层次的结构表示&#xff0c;是系统的骨架和根基&#xff0c;其决定了系统的健壮性和生命周期的长短。 系统架构设计…

允许访问:掌握权限的艺术

回到20世纪&#xff0c;网络攻击更难实施&#xff0c;因为大多数计算机没有联网&#xff0c;互联网并不普及&#xff0c;只有少数人群可以访问计算机&#xff0c;更重要的是&#xff0c;没有足够的动机来进行攻击。 访问控制政策 而今天&#xff0c;情况完全不同。在糟糕的数据…

【特纳斯电子】血氧饱和度监测仪设计-实物设计

视频及资料链接&#xff1a;血氧饱和度监测仪设计-实物设计 - 电子校园网 编号&#xff1a; T5662203M-SW 设计简介&#xff1a; 本设计是基于STM32的血氧饱和度监测仪系统&#xff0c;主要实现以下功能&#xff1a; 1. STM32单片机作为微处理器 2. MAX30102进行心率血氧检…

A股风格因子看板 (2023.10 第03期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第03期&#xff0c;指数组合数据截止日2023-09-30&#xff0c;要点如下 近1年A股风格因子检验统…

【环境】ubuntu下anaconda虚拟环境中安装的pytorch终于配置成功了!

前请提要 配置情况&#xff1a;双系统——win10ubuntu20.04&#xff1b;anaconda安装与虚拟环境创建&#xff1a;在安装conda的过程中&#xff0c;我修改了安装路径&#xff08;很清楚的记得&#xff09;&#xff1b;昨晚的状态&#xff1a;通过pytorch中的conda命令&#xff…