02、SpringCloud -- Redis和Cookie过期时间刷新功能

秒杀功能完整分析图

在这里插入图片描述

需求:

cookie应该写在网关中,网关中可以自定义filter过滤器,用来实现cookie的刷新和redis中key的刷新,延长用户的操作时间。

就是让用户每操作一次,就可以重新刷新延长操作时间。

代码流程

过滤器类

1、在zuul网关中建一个属性cookie时间的类,然后去继承zuulfilter网关拦截器类

在这里插入图片描述

工具类

2、在shop-common公共服务里面加上这个CookieUtil工具类

注意:在zuul-server服务想用到shop-common服务的类,需要引入该服务的依赖
在这里插入图片描述

在这里插入图片描述

过滤判断

3、然后写代码,获取请求request中的值,然后再CookieUtil类里面判断请求的cookie是否和登录的时候设置的cookie的name一样,一样的话就给cookie延长登录时间

在这里插入图片描述

注意:这个userToken就是我们之前登录方法doLogin里面设置cookie的name的名称
在这里插入图片描述

4、CookieUtil里面的判断方法,获取cookie的value值
在这里插入图片描述

远程调用feign接口

5、需求:获取到cookie之后,就需要远程调用服务(会员服务)进行redis过期时间的刷新,这个刷新的操作要在会员服务里面操作

zuul网关远程调用会员服务

feign远程调用接口

这个@FeignClient(name = “member-server”)表示调用这个接口的时候,走的服务就是这个叫member-server的会员服务
在这里插入图片描述

熔断降级类
在这里插入图片描述

远程调用的时候,这个降级是默认关闭的,所以我们要去给他设置为打开状态

gitee 配置

在gitee的zuul-server.yml这个服务配置里面设置
在这里插入图片描述

6、然后就需要去实现这个feign的api接口了,要在会员服务里面实现

feign接口写在服务 member-api 那里,接口实现写在member-server服务那里

feign远程调用接口

在这里插入图片描述
在这里插入图片描述

接口实现

在这里插入图片描述
zuul网关要远程调用会员服务,那么在启动类要贴@EnableFeignClients注解

在这里插入图片描述

过滤器run方法

延长redis过期时间和cookie的过期时间

在这里插入图片描述

测试:

查看redis的过期时间
每次操作页面,看过期时间有没有被刷新
在这里插入图片描述
查看cookie的过期时间

在这里插入图片描述

问题:

1、发现刷新页面并不会走这个过滤器的代码,没有刷新redis和cookie的过期时间

解决:原来是忘记给这个过滤器类加上这个@Component注解,实现bean注入
在这里插入图片描述
刷新页面后,也会刷新redis的过期时间了
在这里插入图片描述
cookie的时间也刷新了
在这里插入图片描述

2、为什么刷新页面,就会走这个CookieRefreshFilter类里面的代码。

解答:

因为这个CookieRefreshFilter类继承了ZuulFilter类,所以在服务请求zuul网关进行路由的时候,就会走这个过滤器类。

实现过滤器很简单,只需要继承 ZuulFilter 类,并实现 ZuulFilter 中的抽象方法

在这里插入图片描述

<think>好的,我现在需要帮助用户配置外部系统与NC-Portal的单点登录,以便外系统能够通过SSO访问并自动加载待办事项。首先,我需要回忆一下单点登录的基本原理常见实现方式。根据用户提供的引用内容,特别是引用[3]提到的Sa-Token的模式二,客户端不同源但Redis同源的情况,这可能适用于用户的需求,因为NC-Portal外部系统可能部署在不同域下。 接下来,用户提到的是NC-Portal,可能是指用友NC系统的门户,所以需要确认NC本身是否支持SSO,以及支持的协议,比如OAuth2、SAML或者CAS。不过用户提供的引用中提到的框架如XXl-SSO、Smart-SSO、Sa-Token都是基于Token的SSO方案,特别是Sa-Token的模式二,这可能意味着用户希望采用类似Token的机制来实现。 首先,我需要确定NC-Portal的SSO接入方式。通常,企业级系统如用友NC可能已经有自己的SSO配置文档,需要查阅相关文档看是否支持标准的协议或者需要定制开发。如果NC-Portal支持通过Token进行认证,那么可以按照以下步骤配置: 1. **认证中心配置**:在NC-Portal侧搭建或配置认证中心,作为SSO的服务端。根据引用[1]中的XXl-SSO,可能需要配置spring.factories中的自动配置类,比如XxlSsoConfig,来启用SSO的核心过滤器。类似地,Sa-Token的模式二需要配置服务端客户端的Token校验机制。 2. **生成Token**:外部系统需要重定向到NC-Portal的认证中心进行登录,成功后获取Token。例如,引用[2]中的Smart-SSO示例,当访问受保护的URL时,会跳转到服务端登录页,登录后生成Token并重定向回客户端。 3. **Token传递与验证**:外部系统在访问NC-Portal时,需要在请求中携带Token,比如通过URL参数或Cookie。NC-Portal的服务端需要验证Token的有效性,比如引用[3]中提到的通过Redis共享会话信息,确保不同源系统能验证同一个Token。 4. **自动加载待办事项**:一旦SSO成功,用户登录状态建立,NC-Portal需要根据用户身份查询待办列表。这可能需要在Token中包含用户标识,或者通过后端接口根据用户信息获取待办事项。 可能的配置步骤包括: - 在NC-Portal中启用SSO服务端功能,配置允许的外部系统域名或IP。 - 外部系统集成SSO客户端SDK,如Sa-Token的客户端配置,处理重定向Token解析。 - 确保Token的存储验证机制一致,比如使用Redis作为共享存储(引用[3][4]提到的)。 - 编写接口或页面逻辑,在SSO成功后自动跳转到待办事项页面,并加载数据。 还需要考虑安全性,比如Token的加密传输、过期时间、防止重放攻击等。同时,根据引用[2],需要配置排除URL(如登录页)受保护URL的匹配规则,确保未登录时正确跳转。 如果NC-Portal本身不支持现有SSO框架,可能需要定制开发,比如在NC-Portal中添加Filter或Interceptor来处理外部系统的Token验证,类似引用[1]中的XxlSsoConfig过滤器。此外,前端可能需要处理Token的传递,比如通过URL参数附加ticket,后端验证后创建本地会话。 总结来说,步骤大致是:配置SSO服务端客户端,处理认证流程,传递验证Token,最后实现待办列表的自动加载。需要参考NC-Portal的SSO接入文档,结合现有SSO框架如Sa-Token进行集成。</think>### 分步配置指南 要实现外系统通过单点登录访问NC-Portal并自动加载待办列表,需按照以下步骤配置SSO集成: --- #### **1. 确认NC-Portal的SSO协议支持** - **查阅文档**:确认NC-Portal支持的SSO协议(如OAuth2、SAML、CAS或Token机制)[^3]。 - **定制开发(可选)**:若NC-Portal未提供标准SSO接口,需开发适配层(如新增Filter或Interceptor)验证外部Token[^1]。 --- #### **2. 搭建SSO认证中心** - **服务端配置**: - 使用Sa-Token或类似框架搭建认证中心,配置Redis共享会话存储(模式二适用跨域场景)[^4]。 - 配置`spring.factories`启用SSO核心组件(参考XXl-SSO的自动配置模式): ```properties org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.xxl.sso.core.filter.XxlSsoConfig ``` - **Token生成逻辑**:用户登录后生成加密Token并存入Redis,携带用户ID等标识信息。 --- #### **3. 外部系统集成SSO客户端** - **客户端配置**: - 引入Sa-Token或Smart-SSO客户端SDK,配置认证中心地址Token校验接口[^2][^3]。 - 示例配置(Smart-SSO): ```yaml smart.sso: server-url: http://nc-portal-sso/auth urls-patterns: /sample/demo/** # 受保护路径 exclude-urls: /sample/demo/page # 排除路径 ``` - **登录跳转逻辑**:未登录用户访问受保护URL时,重定向至NC-Portal认证中心。 --- #### **4. Token传递与验证** - **Token传递方式**: - **URL参数**:`http://nc-portal/dashboard?token=xxxx` - **Cookie(跨域需CORS)**:设置Domain为父级域名,确保NC-Portal可读取[^3]。 - **服务端验证**:NC-Portal接收Token后,调用认证中心接口或查询Redis验证有效性[^3]。 --- #### **5. 自动加载待办列表** - **用户身份绑定**:Token解析后获取用户ID,查询待办事项接口。 - **前端集成**: - SSO登录成功后,前端自动跳转至待办页面(如`/todo-list`)。 - 调用后端API加载数据: ```javascript // 示例:Ajax请求待办列表 fetch('/api/todos') .then(response => response.json()) .then(data => renderTodoList(data)); ``` --- #### **6. 安全加固** - **HTTPS**:全程使用HTTPS传输Token,防止窃听。 - **Token有效期**:设置短期有效并支持刷新机制。 - **权限控制**:Token中可包含角色信息,NC-Portal按角色过滤待办数据。 --- ### 配置文件示例(Sa-Token模式二) ```java // 认证中心配置 @Configuration public class SsoConfig { @Bean public SaTokenConfig getSaTokenConfig() { SaTokenConfig config = new SaTokenConfig(); config.setTokenName("nc-token"); config.setTimeout(3600); // 1小时有效 config.setIsShare(true); // 共享会话 config.setRedis(REDIS_CONFIG); // Redis连接 return config; } } ``` --- ### 相关技术问题 1. **如何解决跨域Token传递问题?** - 使用CORS配置允许外部域名,或通过后端代理中转请求。 2. **如何实现Token自动刷新?** - 在Token过期前,客户端静默调用刷新接口获取新Token。 3. **如何监控SSO登录状态?** - 通过Redis会话存储实时查询在线用户,或集成日志审计模块。 --- ### 引用来源 [^1]: XXl-SSO组件化配置与自动加载原理 [^2]: Smart-SSO的路径匹配与排除规则 : Sa-Token模式二的跨域会话共享实现 : Ruoyi-cloud集成Sa-Token的SSO实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值