Bladex后端实现登入时间过期后自动跳转登入页

news2024/11/16 3:46:39

Bladex后端实现登入时间过期后自动跳转登入页

  • 背景现状
  • 期待成果
  • 解决方法一
    • 找到鉴权配置页面
    • 重写拦截器addInterceptors
    • 创建CustomMiddleware编制拦截逻辑
    • 修改登入有效时常

背景现状

在这里插入图片描述
Bladex可手动设置过期时间,但是我使用的是springboot BladeX 2.8.1.RELEASE版本,存在session过期后,后端AuthUtil.getUser().getDetail()自动清空但前端却还可以继续访问页面,前端未跳转至登入页面,导致部分接口报错问题。
前端现状:判断所有返回R中如果存在code为401的结果值,清空前端用户数据后调用后端登出(/logout)接口成功,则退回登入页面(/login)

期待成果

后端:使用拦截器拦截所有业务接口,判断是否存在AuthUtil.getUser().getDetail()手动添加字段为null情况,如果为null,并返回状态401,前端自动跳转自登入页面

解决方法一

找到鉴权配置页面

在这里插入图片描述

重写拦截器addInterceptors

创建了一个名为 CustomMiddleware 的自定义中间件类,并将它注册到了 Blade 框架中。addPathPatterns() 方法用于指定需要被中间件处理的请求路径,excludePathPatterns() 方法用于指定不需要被中间件处理的请求路径。

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new CustomMiddleware())
			.addPathPatterns("/**")
			.excludePathPatterns("/blade-auth/**")
			.excludePathPatterns("/blade-system/menu/routes")
			.excludePathPatterns("/blade-system/menu/auth-routes")
			.excludePathPatterns("/blade-system/menu/top-menu")
			.excludePathPatterns("/blade-system/tenant/info")
			.excludePathPatterns("/blade-flow/process/resource-view")
			.excludePathPatterns("/blade-flow/process/diagram-view")
			.excludePathPatterns("/blade-flow/manager/check-upload")
			.excludePathPatterns("/doc.html")
			.excludePathPatterns("/js/**")
			.excludePathPatterns("/webjars/**")
			.excludePathPatterns("/swagger-resources/**")
			.excludePathPatterns("/druid/**")
			.excludePathPatterns("/login");
	}

创建CustomMiddleware编制拦截逻辑

下面是一个 CustomMiddleware 类实现示例,其中假设您需要对所有请求进行用户登录认证,如果用户未登录则调用一个返回code为401的R实体类,前端接到401编码后自动返回登入页

public class CustomMiddleware implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		// 判断Session中的用户信息是否过期
		if(AuthUtil.getUser() == null || AuthUtil.getUser().getDetail() == null
			|| AuthUtil.getUser().getDetail().get("ancestors") == null){
			// 登录信息已过期,重定向到登录页面
			response.sendRedirect(request.getContextPath()+"/blade-auth/oauth/activeLogout");
			System.out.println(AuthUtil.getUser());
			System.out.println("--------------------------------------------");
			System.out.println(AuthUtil.getUser().getDetail());
			return false;
		}
		// 用户已登录,继续处理请求
		return true;
	}

}
	@GetMapping("/oauth/activeLogout")
	@ApiOperation(value = "主动退出登录")
	public R activeLogout() {
		BladeUser user = AuthUtil.getUser();
		if (user != null && jwtProperties.getState()) {
			String token = JwtUtil.getToken(WebUtil.getRequest().getHeader(TokenConstant.HEADER));
			JwtUtil.removeAccessToken(user.getTenantId(), String.valueOf(user.getUserId()), token);
		}
		return R.fail(401,"");
	}

实现了 HandlerInterceptor 接口,并实现了其中的 preHandle() 方法。preHandle() 方法会在请求到达控制器之前被调用,可以在这个方法中进行一些操作,例如用户认证、授权、日志记录等。在这个方法中,我们首先获取当前的 HttpSession 对象,判断用户是否已登录。如果用户未登录,则重定向到登录页面,并返回 false,表示请求已被处理完毕,不需要继续往下执行。如果用户已登录,则返回 true,表示请求可以继续处理。最后,我们可以在 BladeConfiguration 类的 addInterceptors() 方法中将 CustomMiddleware 注册到 Blade 框架中,让它对所有请求进行处理。

修改登入有效时常

blade:
  web:
    session:
      timeout: 180

server.servlet.session.timeout 是 Spring Boot 内置的参数,用于设置 servlet session 的超时时间。而 blade.web.session.timeout 是 Blade 框架的参数,用于设置 web session 的超时时间。因此,如果你在使用 Blade 框架的话,应该以 blade.web.session.timeout 为准。

需要注意的是,两个参数的时间单位不同,server.servlet.session.timeout 使用的是秒,而 blade.web.session.timeout 使用的是分钟。因此,在设置时间时需要根据实际情况进行转换
在这里插入图片描述
如果要修改登入时常,除了要设置后端session时常配置外,还需要设置令牌的时间

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

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

相关文章

游戏测试的面试技巧

游戏测试的面试技巧 1.自我介绍 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验 ,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入…

docker镜像创建|实战案例(ssh|systemd|nginx|apache|tomcat)

docker镜像创建|实战案例(ssh|systemd|nginx|apache|tomcat) 一 Docker 镜像的创建1.基于现有镜像创建2基于本地模板创建3 基于Dockerfile 创建为什么Docker里的centos的大小才200M?DockerfileDocker 镜像结构的分层 4 Dockerfile 案例&#…

宝光股份 | 打造营销管理数据平台,实现营销管理和业务双提升

陕西宝光真空电器股份有限公司(以下简称“宝光股份”),注册资本3.3亿元,于2002年1月在上海证券交易所上市(股票代码:600379)。 宝光股份已发展成为享誉国内外的真空灭弧室产销基地,…

Python每日一练(20230426)

目录 1. 删除重复字符 ※ 2. 颜色分类 🌟🌟 3. 计算圆周率 ※ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 删除重复字符 原标题: 输出不重复…

mysql数据库SQL语句orderBy排序同时limit分页出现数据重复问题

先说解决方案:排序中使用唯一值(例如主键id),保证每条数据不重复 SELECT * FROM table WHERE 1 1 ORDER BY create_time,id DESC LIMIT 0, 10;1、问题 MySQL官方描述: 如果多行在列中具有相同的值ORDER BY&#xff…

更加适合python小白的object类的特殊方法~

人生苦短, 我用python python 安装包资料:点击此处跳转文末名片获取 一、object类的源码 class object:""" The most base type """def __delattr__(self, *args, **kwargs): signature unknown""" Implement dela…

MybatisPlus入门和分页和条件查询里面的条件和null值的处理方式和查询投影和查询条件设置和id生成相关和逻辑删除

MybatisPlus 简化了mybatis之前的在springboot整合MyBatis时需要自己写sql语句在接口中&#xff0c;现在只需要让接口继承BaseMapper<实体类>&#xff0c;然后在测试类中接口.增删改查方法&#xff08;&#xff09;即可 不用像springboot整合mybatis一样勾选spring web…

第三章 游戏对象基本操作

创建游戏世界的第一步&#xff0c;就是创建一个一个的游戏对象。当然&#xff0c;大部分的游戏对象都是3D模型&#xff0c;是需要先导入到Unity工程里面后再使用的。这里&#xff0c;我们使用Unity自带的一些基本游戏对象来说明场景中的一些基本操作。在DirectX的课程中&#x…

即时配送,即时很重要!商家能不能盈利,“快”是源头

“家里水果没有了&#xff0c;选几样叫个跑腿送来吧。” “现在得囤点布洛芬了&#xff0c;我从网上下单。” “同城配送真是太及时、太方便了。” 最近一段时间&#xff0c;如果要问有什么产业突然兴起的话&#xff0c;即时零售无疑是市场最受欢迎的产业。甚至有种说法&…

C盘变红了如何清理?释放C盘空间的3大方法!

案例&#xff1a;c盘变红了如何清理 【我的电脑才用了不到一年&#xff0c;现在c盘已经爆红了&#xff0c;c盘里的文件那么多&#xff0c;我也不敢乱删里面的文件&#xff0c;请问下大家遇到c盘变红的情况都是如何清理的呀&#xff1f;】 C盘是电脑中最常用的磁盘之一&#x…

ubuntu中编译serialplot

源码链接&#xff1a;GitHub - hyOzd/serialplot: Small and simple software for plotting data from serial port in realtime. 安装依赖 apt install qtbase5-dev libqt5serialport5-dev cmake mercurial qttools5-dev libqt5svg5-dev 下载编译serialplot hg clone https…

九耶丨阁瑞钛伦特-Java分布式(一)

分布式是指将一个大型系统分为多个小型子系统&#xff0c;这些子系统可以通过网络相互通信&#xff0c;在共享资源的同时协同工作&#xff0c;从而构成一个大型的、功能完整的系统。分布式系统有以下几个特点&#xff1a; &#xff08;1&#xff09;分割资源&#xff1b; &…

【Java数据结构】二叉树的前中后序遍历(递归和非递归)

二叉树的遍历 递归做法前序遍历中序遍历后序遍历 非递归前序遍历中序遍历后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍历 前序遍历的遍历方式是先根节点 在左节点 在右节点 述这棵树前序遍历的结…

一种视频算法插件流水线执行架构

目的 将视频接入进来以后&#xff0c;使用算法对图像进行处理并且输出 1 各种接入 2 解码 3 解码后图像算法 如矫正算法 4 共享输出 方式 使用动态库的方式进行扫描底层&#xff0c;每个动态库为一个插件&#xff0c;每个插件包含特定的函数&#xff0c;通过扫描的方式加载所…

Juniper 命令集合,分好类了,网工收好了哦!

Juniper是一家全球领先的网络设备制造商&#xff0c;其设备广泛应用于企业、运营商和数据中心等领域。下面是Juniper常用命令集合&#xff0c;以供参考。 基本命令 show interfaces&#xff1a;查看所有接口状态。show interface [interface-name]&#xff1a;查看指定接口的状…

Java_常用API

Java_常用API ​ API即Application Programming Interface&#xff0c;即应用程序接口。一般来说API就是软件组件之间信息交互的桥梁&#xff0c;通过它无需访问源码。API除了有应用程序接口的含义外&#xff0c;还特质API的说明文档&#xff0c;也称为帮助文档。 1.字符串的…

STM32F4_LCD液晶显示详解

目录 1. LCD简介 2. TFT_LCD简介 2.1 LCD屏显示原理 2.2 TFTLCD硬件分析 2.3 3.5寸 16位80并口驱动 2.4 NT35310驱动时序 2.5 TFTLCD驱动流程 2.6 显存指令 2.6.1 0xD3&#xff1a;读取LCD控制器的ID 2.6.2 0x36&#xff1a;控制扫描方向 2.6.3 0x2A&#xff1a;列地…

传统机器学习(七)支持向量机(2)sklearn中的svm

传统机器学习(七)支持向量机(2)sklearn中的svm 2 sklearn中的svm 2.1 LinearSVC及SVC参数详解 2.1.1 SVC参数 class sklearn.svm.SVC(*,C1.0, kernelrbf, degree3, gammascale, coef00.0, shrinkingTrue, probabilityFalse, tol0.001, cache_size200, class_weightNone, ve…

【刷题记录】stack queue的题目练习

文章目录 1. 最小栈2. 逆波兰表达式3. 栈的压入弹出序列4. 栈实现队列5. 队列实现栈 1. 最小栈 题目链接&#xff1a;155. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 题干&#xff1a; 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时…

使用django_celery_beat在admin后台配置计划任务

一、依赖包的安装 django中使用celery做异步任务和计划任务最头疼的点就是包之间版本兼容性问题&#xff0c;项目一启动花花报错&#xff0c;大概率都是版本问题。每次都会花很大时间在版本兼容性问题上。本例使用如下版本&#xff1a; Django3.2 celery5.2.7 django-celery-b…