jsp+spring+struts2+mybatis:模仿微信pc網(wǎng)頁(yè)版掃碼登錄使用js代碼生成
目前,很多軟件都可以使用第三方賬號(hào)登入。微信可謂是開(kāi)辟新徑,微信則使用二維碼掃描登錄。如何使用微信掃描二維碼登錄網(wǎng)頁(yè)版微信?
方法
首先,在桌面上找到360瀏覽器圖標(biāo)。
打開(kāi)百度,搜索天天模擬器,進(jìn)入天天模擬器官網(wǎng)點(diǎn)擊官網(wǎng)里面的”立即下載“,跳出“新建下載任
鼠標(biāo)右擊,找到“打開(kāi)”,鼠標(biāo)單擊一下進(jìn)入。
1、手機(jī)登錄自己的私人微信號(hào);2、電腦瀏覽器打開(kāi)微信網(wǎng)頁(yè)版登錄頁(yè)面;3、打開(kāi)手機(jī)微信上的“掃
進(jìn)入網(wǎng)頁(yè)后在搜索欄中輸入“微信網(wǎng)頁(yè)版”后,點(diǎn)擊“搜索”。
告訴你個(gè)十分管用的方法,我的是2.7.0,版本有點(diǎn)老,不過(guò)好用。首先要至少有兩個(gè)圖,其中一個(gè)是你
在出來(lái)的選項(xiàng)中,選擇帶有“官網(wǎng)”的“微信網(wǎng)頁(yè)版”,鼠標(biāo)單擊進(jìn)入。
直接登錄微信網(wǎng)頁(yè)版地址:wx.qq.com,會(huì)出現(xiàn)一個(gè)二維碼。然后,用手機(jī)登錄微信后,在微信頁(yè)面的“
此時(shí)網(wǎng)頁(yè)頁(yè)面會(huì)出現(xiàn)一個(gè)二維碼圖案,這時(shí)需要使用手機(jī)進(jìn)行掃描。
在電腦上登上wx.qq.com之后用手機(jī)掃一下屏幕上的二維碼即可登錄微信網(wǎng)頁(yè)版。具體可看圖。1.
掃描完成后,你的微信頭像會(huì)顯示出來(lái),然后需要在手機(jī)上確認(rèn)登錄。
簡(jiǎn)單說(shuō),就是二維碼包含了你的瀏覽器sessionid,可以認(rèn)為是瀏覽器的標(biāo)識(shí)符。掃描以后發(fā)個(gè)服務(wù)
最后可以看見(jiàn)成功登錄了網(wǎng)頁(yè)版微信,你可以根據(jù)需要發(fā)送文件或者和好友聊天了。
如果你是第一次登入網(wǎng)頁(yè)版微信,必須掃描二維碼,這樣才能確定你是在哪一臺(tái)電腦上登入。同一臺(tái)電腦第二次登
擴(kuò)展閱讀,以下內(nèi)容您可能還感興趣。
如何使用java實(shí)現(xiàn)二維碼掃描登錄微信網(wǎng)頁(yè)版(微信端)?
jsp+spring+struts2+mybatis:
模仿微信pc網(wǎng)頁(yè)版掃碼登錄
使用js代碼生成qrcode二維碼減輕服務(wù)器壓力
js循環(huán)請(qǐng)求服務(wù)端,判斷是否qrcode被掃
二維碼超時(shí)失效功能
二維碼被掃成功登錄,服務(wù)端產(chǎn)生sessionId,傳到頁(yè)面使用js保存cookie
多線程
### 生成qrcode相關(guān)js jquery.qrcode.js - ### 代碼 “請(qǐng)使用手機(jī)掃碼
//生成二維碼
!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();//自動(dòng)循環(huán)調(diào)用
}();
function keepPool(){var uuid = $("#uuid").val();
$.get(ctx+"/web/login/pool.do",{uuid:uuid,},function(msg){//如果放入一個(gè)不存在的網(wǎng)址怎么辦?
//console.log(msg);
if(msg.successFlag == '1'){
$("#result").html("掃碼成功");
setCookie(msg.data.cname, msg.data.cvalue, 3*60*60*1000);
//alert("將跳轉(zhuǎn)...");
window.location.href = ctx +"/webstage/login/success.do";
}else if(msg.successFlag == '0'){
$("#result").html("該二維碼已經(jīng)失效,請(qǐng)重新獲取");
}else{
keepPool();
}
});
}
//設(shè)置cookie
function setCookie(cname, cvalue, expireTime) {
var d = new Date();
d.setTime(d.getTime() + expireTime);//設(shè)置過(guò)期時(shí)間
var expires = "expires="+d.toUTCString();
var path = "path=/"
document.cookie = cname + "=" + cvalue + "; " + expires + "; " + path;
}
java代碼
//二維碼首頁(yè)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("檢測(cè)[ " + uuid + " ]是否登錄");
ScanPool pool = null;
if(MapUtils.isNotEmpty(PoolCache.cacheMap)) pool = PoolCache.cacheMap.get(uuid); try { if (pool == null) { // 掃碼超時(shí),進(jìn)線程休眠
result = DataResultInfo.getInstance().failure();
result.setSuccessFlag(CommonConstant.Zero);
result.setExtension(CommonConstant.Zero, "該二維碼已經(jīng)失效,請(qǐng)重新獲取");
Thread.sleep(10 * 1000L);
} else { // 使用計(jì)時(shí)器,固定時(shí)間后不再等待掃描結(jié)果--防止頁(yè)面訪問(wèn)超時(shí)
new Thread(new ScanCounter(uuid, pool)).start(); boolean scanFlag = pool.getScanStatus(); //這里得到的ScanPool(時(shí)間靠前)和用戶使用手機(jī)掃碼后得到的不是一個(gè),用戶掃碼后又重新更新了ScanPool對(duì)象,并重新放入了redis中,,所以這里要等待上面的計(jì)時(shí)器走完,才能獲得最新的ScanPool
if (scanFlag) {
result = DataResultInfo.getSuccess(); // 根據(jù)e69da5e887aae799bee5baa6e997aee7ad9431333363396465uuid從redis中獲取pool對(duì)象,得到對(duì)應(yīng)的sessionId,返給頁(yè)面,通過(guò)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("等待掃描");
}
}
} catch (Exception e) {
e.printStackTrace();
}
sendJsonMessage(result);
}//手機(jī)掃碼接口(以id和token作為用戶身份登錄)
public String phoneScanLogin() {
DataResultInfo result = null;
ScanPool pool = null;
if(MapUtils.isNotEmpty(PoolCache.cacheMap)) pool = PoolCache.cacheMap.get(uuid); try { if (pool == null) {
result = DataResultInfo.getInstance().failure();
result.setMessage("該二維碼已經(jīng)失效,請(qǐng)重新獲取");
} else { if (StringUtils.isNotEmpty(id) && StringUtils.isNotEmpty(token)) { //根據(jù)id和token查詢后臺(tái),獲取用戶信息userBean
String redisToken = redisUtil.getRedis(RedisKeyConstant.APP_TOKEN+userId); if(redisToken != null && redisToken.equals(token)){
UserBean userBean = userService.findByUserId(Long.valueOf(userId)); if (userBean != null) {
String sessionId = SessionConstant.SESSION_ID_PRE
+ FormatUtils.password(userBean.getId()
.toString());
Map<String, String> cookieSession = new HashMap<String, String>();
cookieSession
.put(CookieConstant.SESSION_KEY, sessionId); // WrCookie.writeCookie(getResponse(),cookieSession);
// 添加用戶信息到redis
boolean re = redisUtil.addUserInfo( RedisKeyConstant.SESSION + sessionId, BeanUtils.toBean(userBean, UserInfo.class));
getSession().setAttribute( SessionConstant.USER_INFO_WEB, BeanUtils.toBean(userBean, UserInfo.class));
getSession().setAttribute( DomainConstant.USER_CENTER_KEY, DomainConstant.USER_CENTER);
pool.setSession(sessionId);
pool.scanSuccess();
}else{
result = DataResultInfo.getInstance().failure();
result.setMessage("用戶信息獲取異常!請(qǐng)稍后再試");
}
} else {
result = DataResultInfo.getInstance().failure();
result.setExtension("11", "用戶身份信息失效,請(qǐng)重新登錄!");
}
} else {
result = DataResultInfo.getInstance().failure();
result.setMessage("請(qǐng)求參數(shù)有誤!"); return "error";
} // 不能清除,否則conn方法得不到pool對(duì)象,不會(huì)進(jìn)入線程休眠
// System.out.println("清除掃描過(guò)的uuid");
//PoolCache.cacheMap.remove(uuid);
}
} catch (Exception e) {
Log4jUtil.CommonLog.error("手機(jī)掃碼 后訪問(wèn) 異常", e);
}
sendJsonMessage(result); return null;
}//掃碼成功跳轉(zhuǎn)頁(yè)
public String success() {
String sessionId = WrCookie.getCookie(super.getRequest(), CookieConstant.SESSION_KEY);
UserInfo userInfo = redisUtil.getUserInfo(RedisKeyConstant.SESSION + sessionId); super.getRequest().setAttribute(SessionConstant.USER_INFO_WEB, userInfo); return SUCCESS;
}//線程判斷二維碼是否超時(shí)class ScanCounter implements Runnable { public Long timeout = 30 * 1000L; //超時(shí)時(shí)長(zhǎng)
// 傳入的對(duì)象
private String uuid; private ScanPool scanPool; public ScanCounter(String p, ScanPool scanPool) {
uuid = p; this.scanPool = scanPool;
} @Override
public void run() { try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
e.printStackTrace();
}
notifyPool(uuid, scanPool);
} public synchronized void notifyPool(String uuid, ScanPool scanPool) { if (scanPool != null) scanPool.notifyPool();
} public String getUuid() { return uuid;
} public void setUuid(String uuid) { this.uuid = uuid;
} public ScanPool getScanPool() { return scanPool;
} public void setScanPool(ScanPool scanPool) { this.scanPool = scanPool;
}
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
ScanPool.java(存放uuid的bean)
public class ScanPool implements Serializable{/**
* @Fields serialVersionUID : TODO(用一句話描述這個(gè)變量表示什么)
*/
private static final long serialVersionUID = -9117921544228636689L; private Object session ; //創(chuàng)建時(shí)間
private Long createTime = System.currentTimeMillis();
//登錄狀態(tài)
private boolean scanFlag = false;
public boolean isScan(){
return scanFlag;
}
public void setScan(boolean scanFlag){
this.scanFlag = scanFlag;
}
/**
* 獲取掃描狀態(tài),如果還沒(méi)有掃描,則等待固定秒數(shù)
* @param wiatSecond 需要等待的秒數(shù)
* @return
*/
public synchronized boolean getScanStatus(){
try
{
if(!isScan()){ //如果還未掃描,則等待
this.wait();
}
if (isScan())
{ System.err.println("手機(jī)掃描完成設(shè)置getScanStatus..true..........."); return true;
}
} catch (InterruptedException e)
{
e.printStackTrace();
}
return false;
}
/**
* 掃碼之后設(shè)置掃碼狀態(tài)
* @param token
* @param id
*/
public synchronized void scanSuccess(){
try
{ System.err.println("手機(jī)掃描完成setScan(true)....同時(shí)釋放notifyAll(手機(jī)掃碼時(shí),根據(jù)uuid獲得的scanpool對(duì)象)");
setScan(true);
this.notifyAll();
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized void notifyPool(){
try
{
this.notifyAll();
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/***********************************************/
public Long getCreateTime()
{
return createTime;
}
public void setCreateTime(Long createTime)
{
this.createTime = createTime;
} public Object getSession() { return session;
} public void setSession(Object session) { this.session = session;
}
電腦版微信不用掃描二維碼怎么登錄
1、需要在電腦中下載安裝“安卓模擬器”和“微信安卓版”,安卓模擬器大家百度搜索一下,可以找到很多。下面我們這里使用的是“東東手游助手”,在電腦中打開(kāi)下載安裝的【東東手游助手】,然后在zhidao【我的應(yīng)用】中,點(diǎn)擊【安裝本地應(yīng)用】,然后打開(kāi)下載的【微信安卓版】進(jìn)行安裝;
2、在安卓模擬器中安裝微信安卓版成功后,就可以點(diǎn)擊【啟動(dòng)】打開(kāi)微信了;
3、接下來(lái)會(huì)彈出微信登陸界面,登陸界面不同微信網(wǎng)頁(yè)版,而是很手機(jī)版回基本相同,我們直接點(diǎn)擊左下角的【登陸】;
4、再接下來(lái)我們看到的默認(rèn)是手機(jī)號(hào)登陸,無(wú)需使用二維碼。如果手機(jī)在身答邊,可以接受驗(yàn)證碼的話,可以直接使用手機(jī)號(hào)登陸,然后獲取短信驗(yàn)證完成登陸。如果手機(jī)不在身邊或者丟了,我們還可以點(diǎn)擊下方的【使用其他方式登陸】。
微信登錄電腦版不掃二維碼怎么登陸
打開(kāi)百度,搜索天天模擬器,進(jìn)入天天模擬器官網(wǎng)
點(diǎn)擊官網(wǎng)里面的”百立即下載“,跳出“新建下載任務(wù)”框。
點(diǎn)擊“新建下載任務(wù)”框里面的“瀏覽”選擇把文件下載到電度腦的哪一個(gè)地方
《一般默認(rèn)的都是下載到電腦C盤,但是下載到C盤會(huì)很占電腦,導(dǎo)致電腦反應(yīng)變遲鈍問(wèn),所以建議下載到電腦的其他盤里面,D、E、F盤都可以》
文件下載好后,點(diǎn)擊“打開(kāi)文件夾”就可以看見(jiàn)天天模擬器的圖標(biāo)
咱們?cè)儆檬髽?biāo)左鍵雙擊圖標(biāo),出現(xiàn)如圖所示,點(diǎn)擊“運(yùn)行(答R)
點(diǎn)擊“運(yùn)行”出現(xiàn)如圖所示的框,點(diǎn)擊”開(kāi)始下載“
如果出現(xiàn)如圖類似的東西,請(qǐng)點(diǎn)擊右下角的“繼續(xù)版下載”,(如果沒(méi)有請(qǐng)忽權(quán)略這一步)
8
下載完成后,再按照提示完成操作,桌面就會(huì)有“天天模擬器的圖標(biāo)”了,雙擊圖標(biāo)
微信網(wǎng)頁(yè)版怎么用賬號(hào)登陸
1、手機(jī)登錄自己的私人微信號(hào);
2、電腦瀏覽來(lái)器打開(kāi)微信網(wǎng)頁(yè)版登錄頁(yè)面;
3、打開(kāi)手機(jī)微信上的“掃一掃”功能,對(duì)準(zhǔn)網(wǎng)頁(yè)版二維碼掃描;
4、掃描成功,請(qǐng)到手機(jī)微信上確認(rèn)登錄源網(wǎng)頁(yè)版,確認(rèn)好了之后,網(wǎng)頁(yè)版就會(huì)自動(dòng)加載你微信信息;
5、登錄成功,可以直接向好友或者微信群發(fā)送消息zhidao。
溫馨提醒:微信網(wǎng)頁(yè)版沒(méi)有朋友圈功能,而且對(duì)話列表不會(huì)顯示公眾號(hào)發(fā)來(lái)的信息。
電腦版微信怎么掃描二維碼
告訴你個(gè)十分管用的方法,
我的來(lái)是2.7.0,版本有點(diǎn)老,不過(guò)好用。首先要至少有兩個(gè)圖,其中一個(gè)是你要識(shí)別的圖,另一個(gè)隨源便。把這兩個(gè)圖分開(kāi)發(fā)給任意一個(gè)人或微信傳輸助手。百你要點(diǎn)開(kāi)沒(méi)用的那個(gè)圖,也就是隨便找的那個(gè)圖。點(diǎn)開(kāi)后,右鍵,有四個(gè)選項(xiàng),然后,移動(dòng)鼠標(biāo)度,不要管這四個(gè)東西,鼠標(biāo)移動(dòng)到圖片右側(cè)或左側(cè)(這個(gè)要根據(jù)你發(fā)圖知片的順序,反正是要點(diǎn)到要識(shí)別的圖),點(diǎn)擊切換上一張或下一張,就來(lái)到了要識(shí)別道的圖了。離成功僅差一步:右鍵,點(diǎn)開(kāi)你就有驚喜。
望采納,謝謝!
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:0731-84117792 E-MAIL:11247931@qq.com