微信扫码登陆整合shiro 跨域ajax对cookie处理
2017-10-20 16:40
337 查看
管理端登录业务逻辑
服务器提供非授权接口获取appid、redirectUrl参数前端通过引用js文件,加载页面时生成微信二维码
window.onload = (function wxLogin(){ var obj = new WxLogin ({ id:"login_container",//div的id appid: "appid", scope: "snsapi_login",//写死 redirect_uri:encodeURI(redirectUrl) , state: "", style: "black",//二维码黑白风格 href: "https://某个域名下的css文件" }); })
服务器端处理微信回调请求,处理code,根据code获取accesstoken,获取用户信息。
StringBuilder url = new StringBuilder(); url.append("https://api.weixin.qq.com/sns/oauth2/access_token?"); url.append("appid=").append(appid); url.append("&secret=").append(secret); url.append("&code=").append(code); url.append("&grant_type=authorization_code"); // 获取accessToken String token = HttpUtils.doGet(url.toString()); JSONObject json = JSONObject.parseObject(token); // 获取管理员的用户 String getUserUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + json.get("access_token") + "&openid=" + json.get("openid") + ""; String userStr = HttpUtils.doGet(getUserUrl);
处理微信返回的用户信息,服务器生成加密token与redis中的用户数据相关联,将此token存储在cookie之中。
Cookie cookie_com = new Cookie("user-:", token); cookie_com.setPath("/"); if (cookieAge != -1) { cookie_com.setMaxAge(cookieAge); } cookie_com.setDomain("test.com"); response.addCookie(cookie_com);
拿到用户信息与管理员列表进行对比,如果发现拥有绑定微信的管理员则登陆。
微信扫码过后会有cookie保留期,如果想退出登录需要手动点击退出登录处理登录信息。
shiro对登陆信息的处理会通过从JSESSIONID获取用户信息和判断是否登陆,然而这个JSESSIONID保存在cookie之中,所以如果在跨域的情况下想保持登陆状态,需要进行ajax请求时的cookie传递操作
原生ajax对cookie的处理: xhr.withCredentials = true; jquery: $.ajax({ url: a_cross_domain_url, // 将XHR对象的withCredentials设为true xhrFields:{ withCredentials:true }});
同时服务器端需要对访问的origin进行同意处理
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080"); response.setHeader("Access-Control-Allow-Credentials", "true");
相关文章推荐
- ajax处理跨域请求和传递cookie
- 整合大量开源库温习基础项目(三)登陆注册主页面大致完成,分析下怎么处理用户信息
- Ajax 的跨域处理
- html5 新特性ajax跨域的问题和处理
- Shiro 处理ajax请求 拦截登录超时---解决!
- 在前后端分离的项目中,ajax跨域请求怎样附带cookie
- mvc3和dz nt v3.6完美跨域登陆整合解析
- 本地HTMLajax跨域请求携带cookie数据,请求不会被登录拦截器拦截
- PHP处理Ajax请求与Ajax跨域问题
- 跨域用ajax处理并返回处理状态
- shiro安全框架扩展教程--如何扩展异步(ajax)请求认证失败处理
- 跨域登陆,IE下无法记录Cookie
- 关于shiro中 ajax请求登录失效的处理
- 用 Microsoft Ajax Library 异步获取页面并显示2跨域读取RSS并处理
- ajax 代理 中转 http请求,处理 跨域访问 问题
- ajax后台跨域处理
- shiro 解决 跨域(仅端口不同) 登陆 问题
- 跨域请求Ajax(POST)处理方法
- Nginx服务器中处理AJAX跨域请求的配置方法讲解
- 在前后端分离的项目中,ajax跨域请求怎样附带cookie