react 项目实现监控鼠标移动超时未操作踢出登录页面

前言

现在有这么一个需求,我们在登陆网页后,有一些私密的内容,不希望被路过的人或离开一段时间后如果没有操作,就回退到登录页。

1.简单案例(用于初步测试)

src目录下新建utils文件夹,用来存放功能组件文件,新建overtime.js,参考以下代码:

//外部定义用于清除本地缓存
import {removeToken} from './auth.js'

let timeOut = 10 * 1000;
let lastTime = new Date().getTime();
let currentTime = new Date().getTime();
//获取最外层div
let ICE_CONTAINER = document.getElementById('root');
// timeType 判断页面是否为登录页,如果是不执行踢出登录操作,初始状态为false
let timeType = false;

const OvertimeLogin=()=> {
   let testTime=()=> {//定时器
        /* 检测鼠标移动事件 */
        ICE_CONTAINER.addEventListener('mousemove', function() {
            // 更新最后的操作时间(鼠标每移动一次,就会重新计算时间)
            lastTime = new Date().getTime();
        })
        //获取当前路径   是否在登录页 还在主页即为true
			timeType = window.location.href.indexOf('login') < 0;
			//更新当前时间
			currentTime = new Date().getTime();
			console.log('currentTime', (currentTime - lastTime)/1000)
        //判断是否超时
        if (currentTime - lastTime > timeOut) {
            if (timeType) {
                console.log('超时拉')
				// 超时操作
				console.log("长时间未操作,请重新登陆");
                // 清除定时器
				window.clearInterval(global.overtime)
                //清除本地缓存
				removeToken()	
                //跳转至登录页	
				global.props.history.push('/login')
				lastTime = new Date().getTime();
		    } else {
		      lastTime = new Date().getTime();
		      console.log('我不会踢出的')
		    }
        }
    }
	return testTime
}	

export default OvertimeLogin

项目内需要此功能的页面使用

import OvertimeLogin from '../../overtime'

// 生命周期内触发函数,十秒鼠标不操作会退回登录页
componentDidMount(){		
//windows上设置一个循环定时器,每隔一秒调用一次监听函数,并定义在全局global上,用于超时后清除
    global.overtime = window.setInterval(OvertimeLogin(), 1000);
}

运行项目,登陆成功后,不移动鼠标,控制台开始计时显示

 10秒后自动跳转至登录页

2.遇到的问题

函数内跳转获取不到props,会报错undefined,

方法一:在登录页全局定义global.props = props

函数内可使用

 方法二:使用Eventbus,传值

参考链接

React配合axios请求拦截校验session,403跳转至登陆页面_六卿的博客-CSDN博客_axios拦截403这个在Vue中很简单的就解决了,直接引入router,然后router.push,但是在React中,我们要使用props.history.push进行跳转,但是怎么在axios.js中拿到props呢?又是个问题。https://blog.csdn.net/qq_43291759/article/details/122575849

3.完整案例

步骤:

1.react类组件中,登陆后的主页面,在定义组件之前创建一个变量,用于获取dom元素;

2.在生命周期componentDidMount中监听鼠标键盘行为,并创建定时器;

注意:此处如果使用window进行全局监听则会出问题,最后操作时间无法清除

3.在生命周期componentWillUnmount中移除定时器,并销毁监听事件。

class Home extends Component {   
    componentDidMount() {
		this.ChangeUserOperation()
		this.CheckOpartionTimer = setInterval(
		    () => {
		        let _lastTime = LocalStorage.getItems('lastTime') * 1;
		        let nowTime = new Date().getTime();
				// console.log('nowTime',nowTime);
		        if(nowTime - _lastTime > 1000 * 10) {
		            console.log('当前时间:',nowTime,'最新时间',_lastTime, '间隔:', (nowTime-_lastTime), '超时了,已退出登录');
		            message.warning('长时间未操作,已退出登录', 9);
		            // 清除计时器
		            clearInterval(this.CheckOpartionTimer)
		            // 断开连接,退出
		            this.Loginout();
		        }
		    },
		    1000
		)
	}

	componentWillUnmount() {
	    clearInterval(this.CheckOpartionTimer);
		LocalStorage.removeAllItems()
		homeWrapper.removeEventListener('click', function(){});
		homeWrapper.removeEventListener('keydown', function(){});
		homeWrapper.removeEventListener('mouseover', function(){});
		homeWrapper.removeEventListener("mousewheel", function(){});
	}

    ChangeUserOperation  = () => {
	    let callEvent = () => {
	        LocalStorage.SetItems('lastTime', new Date().getTime().toString())
	    }
		homeWrapper = document.getElementById('homeWrapper')
	    homeWrapper.addEventListener('click', callEvent);
	    homeWrapper.addEventListener('keydown', callEvent);
	    homeWrapper.addEventListener('mouseover', callEvent);
	    homeWrapper.addEventListener("mousewheel", callEvent);
	}

    return (
			<div id="homeWrapper"></div>
            )
}
export default Home

4.参考文章

 相应的监听BOM事件还有click,keydown,mousewheel等,更详细的用法可参考以下链接:

监听用户长时间未操作页面就自动退出登录_JcaiYang的博客-CSDN博客_网页不操作自动退出登录// 需求:当用户一定时间内没有操作页面,则自动退出登录。操作页面包括页面点击、摁下键盘、鼠标移动、鼠标滚动滚轴等。由于这些操作会频繁操作,建议使用防抖函数来减少性能的消耗。以下是js部分。// 获取浏览器页面var zBody = document.querySelector('html');// 获取服务器的超时登录时长let timeout = localStorage.getItem('timeout') || 0;// 轮询var zNum = 0; // 用户未操作页面时长...https://blog.csdn.net/Jcai_0120/article/details/115539784?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277861016782248542286%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165277861016782248542286&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-4-115539784-null-null.142%5Ev10%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=%E7%BD%91%E9%A1%B5%E4%B8%8D%E6%93%8D%E4%BD%9C%E8%87%AA%E5%8A%A8%E9%80%80%E5%87%BA%E7%99%BB%E5%BD%95&spm=1018.2226.3001.4187前端react 实现监控鼠标移动超时未操作踢出登录页面_前端小小乐的博客-CSDN博客_react监听鼠标移动前言现有系统超时踢出登录实现的是页面操作调取服务时获取,这样就有一个弊端,列如:在未调取服务时,系统填写完相关信息点击提交才知道登录超时踢出登录,用户实用性不佳。现在想到一个方法就是前端获取用户鼠标是否移动,未移动一定时间后,前端实现踢出登录操作。1.给页面最外层的div增加监听事件let ICE_CONTAINER = document.getElementById('app');//鼠标最后的操作时间let lastTime = new Date().getTime();//当前时间lehttps://blog.csdn.net/gxl5201314lele/article/details/114965936?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277595516782248533170%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165277595516782248533170&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-114965936-null-null.142%5Ev10%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=react%E5%AE%9E%E7%8E%B0%E7%9B%91%E6%8E%A7%E9%BC%A0%E6%A0%87&spm=1018.2226.3001.4187

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于开发Java应用程序的框架,它简化了Java开发的很多繁琐过程,提供了快速搭建应用的能力。React是一个用于构建用户界面的JavaScript库,它能够帮助我们构建可复用的UI组件。 要在Spring Boot项目中集成React,可以按照以下步骤进行操作: 1. 创建一个基于Spring Boot的项目,可以使用Spring Initializer快速创建一个空白项目结构。 2. 安装Node.js并使用npm来管理项目依赖。在项目根目录下创建一个新的目录作为前端代码的根目录。 3. 使用npm安装React的依赖:运行`npm install react react-dom`命令。 4. 创建一个入口HTML文件,可以命名为`index.html`,并将其放置在前端代码根目录中。在该HTML文件中,引入React的核心库文件。 5. 创建一个入口JavaScript文件,可以命名为`index.js`,并将其放置在前端代码根目录中。在该JavaScript文件中,编写React组件的代码逻辑。 6. 使用Webpack等前端构建工具,将React的代码编译打包成静态资源文件。配置Webpack的配置文件,将入口JavaScript文件作为打包的入口。 7. 在Spring Boot项目中创建一个RESTful API接口,用于处理前端发送的请求。可以使用Spring MVC来实现这些接口。 8. 在Spring Boot项目中的Controller层中,处理前端发送的增删改查的请求,并调用对应的服务层方法进行具体的业务处理。 9. 在前端代码中,通过Fetch API或者Axios等工具,发送HTTP请求到Spring Boot项目的RESTful API接口,实现与后端的数据交互。 10. 在页面中显示查询到的数据,并提供增删改操作的界面。可以使用React的组件库来构建界面,或者自行编写组件。 通过以上步骤,我们就可以在Spring Boot项目中集成React实现增删改查的操作前端使用React构建用户界面,发送HTTP请求到后端的Spring Boot项目中,后端根据请求的类型进行相应的数据操作,再将结果返回给前端进行显示。这样就完成了一个基本的增删改查功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值