如何对登录token有效期控制,前端控制和后端控制

前端可控制token有效期 , /主动退出

1- 在用户每一次登录时,将用户当前登录时时间保存到store中

2- 设定一个固定的存在有效时间,

3- 在每一次发请求之前,请求拦截器中检验保存在store中的用户登录时保存的时间+有效时间是否大于当前的时间

如果大于了当前的时间,则不做任何操作,说明token 没有过期

当小于当前时间时,说明token已经过期,则强制用户退出登录

退出登录的操作:清除保存的token,强制用户返回登录页面

以下为主动退出的代码段

代码书写在request.js文件中

// 定义允许token存在的时间
const TOKEN_LIVE_TIME = 6 * 60 * 60 * 1000 //一天

// 请求拦截器
service.interceptors.request.use((config) => {
  if (store.getters.token) {
    // 判断用户当前的token是否过期
    // 如果过期了,不允许再发送请求,如果没有过期,则继续
    // 首先获取当前时间
    const LoginTime = parseInt(localStorage.getItem('LoginDate'))
    if (LoginTime + TOKEN_LIVE_TIME < Date.now()) {
      // 此时超时
      // 执行退出操作
      store.dispatch('user/logout')
      Message.error('用户登录已过期,请重新登录')
      return
    }
    config.headers.Authorization = `Bearer ${store.getters.token}`
  }
  return config
})


后端控制 / 被动退出

在响应拦截器中做判断 当用户登录过期时,后端会返回用户登录过期的状态码,前端只需要用if来检测后端返回的数据,如果返回的数据显示当前token已经过期,那么将不返回数据给用户,而是直接进行退出操作,并且强制返回到login页面

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,优先拦截器 5、拦截器是包裹在过滤器中使用的。 复习 converter 转换器 i18n struts2 spring MVC 拦截器 interceptor 过滤器 filter web.xml implements filter filterchain arg2.doFilter(req,resp); 监听器 servlet application /session /request 6/8 个 1、拦截器 定义拦截器的包 <package name="myPackage" extends="struts-default"> 定义拦截器的核心 <interceptors> 定义拦截器类 <interceptor name="myInterceptor" class="util.MyInterceptor"></interceptor> 定义拦截器的值栈空间 <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="myInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> 引入定义的拦截器 <default-interceptor-ref name="myStack"></default-interceptor-ref> 拦截错误跳转的页面 <global-results> <result name="error">/demo01/error.jsp</result> </global-results> </package> 2、 token <package name="testMg" extends="struts-default"> <action name="testAction_*" class="view.TestAction" method="{1}"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref> <result name="invalid.token">/demo02/error.jsp</result> </action> </package> <%@ taglib uri="/struts-tags" prefix="s" %> <s:token></s:token> 3、500字struts2的科学说明文 每人一份 2018-03-19 下午演讲(脱稿) 4、小结 1、struts2对servlet封装(request,response) ,资源调配和资源的映射 2、框架设计的思想 istruts 配置,过滤器,反射 istruts.properties 3、starts2的使用思路 1、jar 2、配置文件 3、常用类 servletActionContext 4、访问流程 url -> filter -> struts.xml -> package -> action -> name="userAction_*" -> class -> method="{1}" 5、核心struts.xml 6、提交策略 图片预览 个人信息完善 7、crud 增删查 搜索 多删 假删 ids ->action -> dao PreparedStatement -- "delete from user where id in ("+ids+")"; 8、converter i18n ModeDriven stack 9、interceptor token 5、hibernate 4.1.4 搭建架构 ORM --- Object relational Mapping UserBean userBean.hbm.xml db table let java objects hibernate in the relational datebase ! persistent Class
Token的生成时机通常是在用户登录成功后。当用户提供正确的用户名和密码进行身份验证后,服务器会生成一个Token,并将其返回给客户端。 Token的生成通常有以下几个步骤: 1. 服务器生成一个包含用户信息和其他必要信息的Payload。 2. Payload通过一定的算法(如HMAC、RSA等)与服务器密钥进行加密,生成一个签名。 3. 将Payload和签名进行Base64编码,得到最终的TokenToken有效期可以根据需求进行设置,可以是短暂的几分钟,也可以是长期的几个小时、几天甚至更长。一般情况下,Token有效期较短可以提高安全性,但会增加频繁重新登录的次数。 在验证Token的有效性时,通常可以根据以下步骤进行: 1. 服务器接收到前端传递过来的Token。 2. 服务器解析Token,验证签名是否有效,并获取Payload中的信息。 3. 检查Token是否过期,如果过期则认为Token无效。 4. 可以根据需要进一步检查Token中的其他信息,如用户权限等。 前端通常通过在请求的Header中添加一个字段(如Authorization)来传递Token后端。具体的传递方式可以是Bearer Token或其他方式,如: ``` Authorization: Bearer <token> ``` 当Token传递到后端后,后端会进行解析和验证操作。后端可以使用密钥来验证Token的签名,并根据Token中的信息进行相应的操作,如获取用户身份、权限验证等。后续的流转根据具体需求而定,可以根据Token中的信息进行相应的业务逻辑处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值