Android 异地登录

这里使用的是java spring作为后端框架,android作为客户端代码,验证的手段是使用token,其中还用到了memcache或者redis(二选一)来保存token进行比较

当时一直考虑的问题是,后台通过封装用户信息并返回了token,android客户端进行了保存,并将其通过协议头传回给后端进行验证,那如何做到多台手机间同一用户登录后进行强制下线呢,有人说可以将手机的设备id作为唯一标识在客户端进行传递后验证,但我这里直接验证token,采用的是将用户名的信息封装在token中,并通过memcache或者redis将其进行保存,发现要有一个保存token的地方,将其与客户端传递的token进行比较,如果在token中用户名等信息一致的情况下,token发生了不一致就判定为异地登录,涉及的操作系统始终是windows,话不多说,直接贴代码

代码有点寒碜,还未封装,但可以看到android端的所有动作,在请求登录时将用户名密码通过post请求进行传递,当请求成功后从Response中取出Header中的set-cookie的value值,这里可以发现走了两次循环,为了将cookie中的token进行获取,也可以判断得出,服务端是将token封装在了cookie中,客户端通过获取响应体中的cookie来获取token,并将其通过SharedPreferences保存在了本地,然后进行跳转,android端请求结束后,我们来看服务端代码

这里是一个过滤器,简单说明一下,这个过滤器会将所有用户的http请求进行过滤,并可以进行选择性的放行,可以看到,这里将用户登录的请求地址进行了放行,也就是说,用户在所有非登录的情况下都会进行token验证,android端将token的请求传递也很简单,就是在请求的过程中

.addHeader("token",token)这行属性就能将token发送到服务端进行验证,服务端通过 String token = request.getHeader("token");就能将token进行获取

让我们来看后端的登录接口

 

可以看到的是这里将用户名密码进行验证成功后将payload生成,通过JWT自带的方法生成token,再将token存在cookie中,用于客户端获取cookie中的token,可以观察前面客户端的代码发现,然后通过memcache或者redis的方式将token保存为键值对的形式,和用户名进行一一对应,这里主要通过Jedis来调用redis,这里所有的sss指的都是本机的地址

那当token生成完毕后将用户登录成功的信息返回后,再看android

 

 当用户登录成功后并成功进行了跳转,再次请求用户信息时就不需要将用户名密码加上了,可以看到,这里只需将token进行携带

用户进行再次请求时,这是过滤器判断用户不是来登录的,是来获取其他信息的,这时就会进行拦截,需要将用户的token进行验证,这里过滤器中的验证代码在上面图中,主要验证过程是这句代码

Map<String, Object> resultMap = Jwt.validToken(token);’

这句代码将token中的payload中的信息进行了获取,并将其保存为一个map形式的对象

具体里面写了什么,看下图

可以看到,这里就是将memcache或者Jedis中已存放的value值进行了获取,获取之后进行简单的比较即可,将memcache中存放的token与用户传递过来的token进行比较,如果不一致,且别的信息无误,那就是异地登录,这里过期时间设置什么的就不细说了

总结一下,也就是说,用户将登录时的token进行了保存,这个保存的地点不只是本地,当用户登录成功时已经将token保存在了memcache或者redis数据库中,且是通过用户名进行的一一对应,当有同一用户进行登录时,登录时会将redis中保存的键值对进行重新赋值,也就是说会覆盖原来的token值,当前一个用户拿着本地的token,也就是老的token来进行验证时会发现和redis中保存的不一致了,也就可以在客户端判断进行用户强制下线了

 

转载于:https://www.cnblogs.com/xiaolvrendefeizi/p/7647795.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值