介绍
今天就跟大家聊聊有关使用javaweb怎么实现应用扫码登录功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1. web页面主动向服务器索要一张由服务器生成包含维一标识的二维码图片,也可以直接向后台索要一个维一标识,拿到标识后通过js生成二维码。这里本人采用的是第二种方式,至于为什么吗?个人感觉这样方便,后台也不要导入架包,最后将该标识存入集列表合中,接下来会用到该标识
2。应用扫码后解析二维码内的维一标识,然后再携带该标识跟用户名发回给服务器,服务器接到请求后,遍历列表集合,验证该标识是否为本系统生成的,若是再去验证用户名是否存在,若存在这时需将标识与用户名绑定在一起,绑定的方式有好多种。我这里采用一种较为简单的方法地图的方式,将标识做为关键用户名做存为价值在一个全局地图中,表示该用户已经扫过码,只等接下来的验证了
3. web页面从向服务器索取二维码或标识后(第一步操作之后)就开始通过ajax每隔2秒或几秒钟带上维一标识向服务器发起检查请求,通过该标识查看地图是否有对应的用户已经扫过码而未登录,有的话直接登录,没有的话继续轮寻,当然你也可以采用建立长连接的方式
4。以下为后台代码,
package com . *; , , @ controller @RequestMapping (value =,“/login") public class  LoginController { , ,@ autowired ,private UserInfoBaseService  userInfoBaseService; , ,//存储二维码维一标识 ,public static  Set, users =, new HashMap<在(); ,/* * ,*生成二维码维一标识给小费 ,* @return ,*/,@ResponseBody ,@RequestMapping (“/generationQRCode") ,public String  generationToken () { ,String uid =, UUID.randomUUID () .toString (); ,tokes.add (uid); ,return uid; ,} ,/* * *大敌;应用扫码后将标记与用户绑定 ,* @param loginName ,* @param 令牌 ,* @return ,*/,@ResponseBody ,@RequestMapping (“/determine") ,public ResponseEntity 确定(String loginName, String 令牌){ ,for (String t:吸烟),{ 如果才能(t.equals(令牌)){ users.put才能(令牌,loginName); UserInfo 才能;UserInfo =, userInfoBaseService.getUserByLoginName (loginName); 如果才能(null==用户信息){return new  ResponseFailure(“用户不存在“);} return 才能;new  ResponseEntity(“正在登录请稍后…“); ,,} ,} ,return new  ResponseEntity(“请求无效“); ,} ,/* * ,* Axaj定时请求是否有用户扫描了二维码 ,* @param 令牌 ,*/,@ResponseBody ,@RequestMapping (“/scanLogin") ,public String  scanLogin (String 令牌){ ,如果(StringKit.isBlank(令牌)){return “token  is null";} ,String loginName =, users.get(令牌); ,如果(StringKit.isBlank (loginName)) {, return “error";} ,//Subject Subject =, SecurityUtils.getSubject();,//注释的这三行换成你自已的登录代码就行了 ,//subject.logout (); ,//UsernamePasswordTokenType tokenType =, new UsernamePasswordTokenType (loginName,,“123456“, 2); ,尝试{ subject.login才能(tokenType); ,}catch (Exception e) { e.printStackTrace才能(); ,} ,users.remove(令牌); ,tokes.remove(令牌); ,return “success"; ,} , }
5。以下为前台代码
//获取维一标识牌生成二维码 ,$ . post (& # 39; $ {ctx}/登录/generationQRCode& # 39;,, function (令牌),{ ,,new QRCode (. getelementbyid (& # 39; qrcode& # 39;),,{文本:令牌,身高:125,宽度:125}); ,,美元(& # 39;# qrcode& # 39;) .removeAttr(& # 39;标题# 39;); ,,美元(& # 39;# qrcode& # 39;) .attr(& # 39;标记# 39;,令牌); ,,,}); ,,,//ajax定时查看是否有用户扫码后未登入 ,,,var time =, setinterval (function (), { ,,,,,var token =,美元(& # 39;# qrcode& # 39;) .attr(& # 39;标记# 39;); ,,,,,如果(令牌){ ,,,,,,,$ . post (& # 39; $ {ctx}/登录/scanLogin& # 39;,{& # 39;标记# 39;:令牌},function (数据),{ ,,,,,,,,,如果(data ==, & # 39;成功# 39;){ ,,,,,,,,,,,clearInterval(时间); ,,,,,,,,,,,window.location.href =, & # 39; $ {ctx}/登录/& # 39;; ,,,,,,,,,} ,,,,,}) ,,} },1000)、使用javaweb怎么实现应用扫码登录功能