没有合适的资源?快使用搜索试试~ 我知道了~
详解java实现简单扫码登录功能(模仿微信网页版扫码)
18 下载量 167 浏览量
2020-08-26
01:36:19
上传
评论
收藏 120KB PDF 举报
温馨提示
试读
4页
主要介绍了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币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功