没有合适的资源?快使用搜索试试~ 我知道了~
首页详解java实现简单扫码登录功能(模仿微信网页版扫码)
详解java实现简单扫码登录功能(模仿微信网页版扫码)
18 下载量 170 浏览量
更新于2023-03-03
评论
收藏 120KB PDF 举报
主要介绍了java实现简单扫码登录功能(模仿微信网页版扫码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
资源详情
资源评论
资源推荐
详解详解java实现简单扫码登录功能实现简单扫码登录功能(模仿微信网页版扫码模仿微信网页版扫码)
主要介绍了java实现简单扫码登录功能(模仿微信网页版扫码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着
小编来一起学习学习吧
java实现简单扫码登录功能实现简单扫码登录功能
1. 模仿微信pc网页版扫码登录
2. 使用js代码生成qrcode二维码减轻服务器压力
3. js循环请求服务端,判断是否qrcode被扫
4. 二维码超时失效功能
5. 二维码被扫成功登录,服务端产生sessionId,传到页面使用js保存cookie
6. 多线程
生成生成qrcode相关相关js jquery.qrcode.js
代码
页面div
<div class="pc_qr_code">
<input type="hidden" id="uuid" value="${uuid }"/>
</div>
<div id="result">请使用手机扫码</div>
主要js
//生成二维码
!function(){
var uuid = $("#uuid").val();
var content;
content = "..........do?uuid="+uuid;
//console.dir(content);
$('.pc_qr_code').qrcode({
render:"canvas",
width:200,
height:200,
correctLevel:0,
text:content,
background:"#ffffff",
foreground:"black",
src:"/logo.png"
});
setCookie("sid", 123, -1*60*60*1000);
keepPool();//自动循环调用
}();
function keepPool(){
var uuid = $("#uuid").val();
$.get(ctx+"/web/login/pool.do",{uuid:uuid,},function(msg){//如果放入一个不存在的网址怎么办?
//console.log(msg);
if(msg.successFlag == '1'){
$("#result").html("扫码成功");
setCookie(msg.data.cname, msg.data.cvalue, 3*60*60*1000);
//alert("将跳转...");
window.location.href = ctx +"/webstage/login/success.do";
}else if(msg.successFlag == '0'){
$("#result").html("该二维码已经失效,请重新获取");
}else{
keepPool();
}
});
}
//设置cookie
function setCookie(cname, cvalue, expireTime) {
var d = new Date();
d.setTime(d.getTime() + expireTime);//设置过期时间
var expires = "expires="+d.toUTCString();
var path = "path=/"
document.cookie = cname + "=" + cvalue + "; " + expires + "; " + path;
}
java代码
//二维码首页
public String index() {
try {
uuid = UUID.randomUUID().toString();
super.getRequest().setAttribute("uuid", uuid);
ScanPool pool = new ScanPool();
pool.setCreateTime(System.currentTimeMillis());
Map<String, ScanPool> map = new HashMap<String, ScanPool>(1);
map.put(uuid, pool);
PoolCache.cacheMap.put(uuid, pool);
pool = null;
} catch (Exception e) {
Log4jUtil.CommonLog.error("pc生成二维码登录", e);
}
return "index";
}
//判断二维码是否被扫描
public void pool() {
DataResultInfo result = null;
System.out.println("检测[ " + uuid + " ]是否登录");
ScanPool pool = null;
if(MapUtils.isNotEmpty(PoolCache.cacheMap)) pool = PoolCache.cacheMap.get(uuid);
try {
if (pool == null) {
// 扫码超时,进线程休眠
result = DataResultInfo.getInstance().failure();
result.setSuccessFlag(CommonConstant.Zero);
result.setExtension(CommonConstant.Zero, "该二维码已经失效,请重新获取");
Thread.sleep(10 * 1000L);
} else {
// 使用计时器,固定时间后不再等待扫描结果--防止页面访问超时
new Thread(new ScanCounter(uuid, pool)).start();
boolean scanFlag = pool.getScanStatus(); //这里得到的ScanPool(时间靠前)和用户使用手机扫码后得到的不是一个,用户扫码后又重新更新了ScanPool对象,并重新放入了redis中,,所以这里要等待上面的计时器走完,才能获得最新的ScanPool
if (scanFlag) {
result = DataResultInfo.getSuccess();
// 根据uuid从redis中获取pool对象,得到对应的sessionId,返给页面,通过js存cookie中
JSONObject jsonObj = new JSONObject();
jsonObj.put("cname", CookieConstant.SESSION_KEY);
jsonObj.put("cvalue", pool.getSession());
result.setData(jsonObj);
} else {
result = DataResultInfo.getInstance().failure();
result.setMessage("等待扫描");
weixin_38625599
- 粉丝: 8
- 资源: 867
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- stc12c5a60s2 例程
- Android通过全局变量传递数据
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0