Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

2025-07-04 18:50

本文主要是介绍Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,...

一、Swagger 与 Knife4j 的深度理解及配置要点

Knife4j是Swagger的加强版

对于Swagger的理解
API文档自动生成,Swagger通过注解或代码扫描,生成交互式API文档。接口测试与调试
Knife4j 是为 Swagger 量身定制的增强 UI 框架,解决了原生 Swagger UI 的一些痛点:
优化界面布局,支持分组、搜索、离线文档等功能
增强文档可读性,如参数说明高亮、响应示例格式化
提供更多扩展功能,如接口排序、在线调试增强等

Knife4j 配置关键要点

1.Spring MVC 路径匹配策略配置

关于Knife4j需要注意一点的是需要在yml添加

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
      profiles:
        active: dev

2. 扫描包与路径分层配置

通过 SwaggerConfig 类指定扫描范围,按业务模块分层管理接口:
对于扫描器需要注意下面的包

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

二、如何前端与后端对接

1.axios是什么?

axios中文文档

axios是一个基于Promise的HTTP客户端,用于浏览器和Node.js环境。它支持发送异步HTTP请求,并提供了拦截请求/响应、转换请求/响应数据、取消请求等功能。

2.安装方式

使用 npm:
 npm install axios
使用 bower:
 bower install axios
使用 yarn
    yarn add axios
使用 cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

前端
如果文件是JavaScript ,myAxios.js
如果文件 TypeScript。myAxios.ts

新建plugins文件夹,新建myAxios.ts文件。

// Set config defaults when creating the instance
//自定义实例默认值
import axios from "axios";
const myAxios = axios.create({
    baseURL: 'http://localhost:8080/api'
});
php//拦截器
// 添加请求拦截器
myAxios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    console.log("请求发送了",config)
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(errwww.chinasem.cnor);
});
// 添加响应拦截器
myAxios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    console.log("请求收到了了",response)
    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});
export default myAxios;

如何实现 Axios 的请求重试机制?
核心实现思路:
在响应拦截器中捕获错误,判断是否需要重试(如状态码 5xx、网络超时);
使用递归或定时器实现重试,搭配指数退避策略控制间隔;
通过计数器限制最大重试次数,超过php则抛出异常。

三、分布式session是花里胡哨还是什么?

在传统单体架构中,Session通常存储在服务器内存中,用户请求由单一服务器处理,不存在Session共享问题。但在分布式系统中,多台服务器共同处理请求,
解决跨服务器的会话共享问题。
我就以Redis分布式Session实现登录的原理来展开介绍。
1.登录:生成Session标识与数据存储

  • 用户认证:用户提交密码后,服务器进行身份验证
  • 生成唯一Session ID : 认证通过后,服务器生成一个全局唯一的 id,作为Session的标识
  • 存储Session数据到Redis:
    • 将用户信息封装为JSON对象,以Session ID为键,存储到Redis中
    • 设置合理的过期时间,避免内存浪费,实现自动过期失效
      代码
import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * Session过滤器:验证请求的Session有效性
 */
public class SessionFilter implements Filter {
    private final RedisSessionManager sessionManager = new RedisSessionManager("localhost", 6379);
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        // 1. 从Cookie中获取Session ID
        String sessionId = extractSessionIdFromCookie(httpRequest);
        // 2. 验证Session
        UserInfo userInfo = sessionManager.getSession(sessionId);
        if (userInfo == null) {
            // 未登录,重定向到登录页
            httpResponse.sendRedirect("/login");
            return;
        }
        // 3. 将用户信息存入请求属性,供后续处理使用
        httpRequest.setAttribute("currentUser", userInfo);
        // 4. 继续请求处理
        chain.doFilter(request, response);
    }
    /**
     * 从Cookie中提取Session ID
     */
    private String extractSessionIdFromCookie(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("JSESSIONID".equals(cookie.getName())) {
                    return cookie.getValue();
                }
            }
        }
        return null;
    }
}    

实际项目中还需:
配置 Redis 集群连接
添加异常处理机制
实现 Session 数据加密
配置 Wepythonb 容器注册过滤器
添加日志记录功能

总结

到此这篇关于Knife4j+Axios+Redis:前后端分离架构下的 API 管理与会话方案的文章就介绍到这了,更多相关Knife4j Axios Redis内容请搜索China编程(www.chinasem.cnuwCfKl)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155302

相关文章

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S