文章版权由作者李晓晖和博客园共有,转载原文链接:http://www.cnblogs.com/naaoveGIS/。
1.背景
Web端的一次成功的登陆请求后,cookie中会保存此次回话的sessionID,再点击其他页面时,会将此sessionID传递给后台,后台读取对应的session来进行相应逻辑行为;也就是说:session本质上还是要基于cookie的。但是,免费手机网关,不支持cookie传输,于是在手机端的权限验证中,并不能简单的在后台用request.getSession()就得到该手机应用统一的session。解决这个问题,可以在手机应用每一次登陆时,产生该用户的一个token(类似于sessionID),手机应用再次发送请求时带上该token即可。
2.具体思路
当手机端和网页端使用同一个后台时,在filter中,可以先判断是否有token传入,如果有则判定为手机请求,通过该token来进行逻辑 判断。如果没有token传入,则进行正常的session判断。
3.开发步骤
针对于手机访问来具体描述
3.1token表设计
token信息在数据库表中单独存储,与humanID一一对应。
3.2token的使用。
3.2.1登陆服务器
手机端人员在登录系统时,需要传用户名和密码过来进行验证。验证通过之后,先删除token表中该人员旧的token信息,同时在token表中新增一条该人员的token记录,并返回到客户端。
3.2.2后台访问
手机端在向服务器发送请求的时候,每个请求后面都需要带上token信息作为传入参数。后台会在Filter中先对token信息进行过滤。如果传入的token在token表中不存在,则直接返回到客户端,提示token已过期,请重新登录。如果token验证通过,则正常的访问后台接口。
3.2.3多终端访问
手机多终端的访问规则与微信类似,即在另一个终端登录后,当前终端自动登出,保证每次只能有一个终端处于连接状态,每次登录都会刷新token。
3.2.4登出
终端人员主动登出时,从token表中移除该人员的token信息。
4.注意
为了安全,该token不能使用明文,可以使用对称加密等方法。