网站实现微信扫码登录+Java+Shiro 框架

news/2024/5/17 10:15:49/文章来源:https://thinkcode.blog.csdn.net/article/details/110927389

                    网站实现微信扫码登录+Java+Shiro 框架

 

一、准备工作

1、注册微信开放平台:https://open.weixin.qq.com/

2、创建网站应用 , 设置授权回调域。

3、开发者认证 (需要企业资质,费用300元)

 

 

 

二、具体实现步骤

1、网页页面生成二维码 ---- 使用第二种方式

步骤1:在页面中先引入如下JS文件(支持https):
http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js步骤2:在需要使用微信登录的地方实例以下JS对象:var obj = new WxLogin({self_redirect:true,id:"login_container", appid: "", scope: "", redirect_uri: "",state: "",style: "",href: ""});

2、通过code获取access_token(服务端实现)

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

3、第三步:获取用户个人信息(UnionID机制) (服务端实现)

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

4、获取到 unionID , 到 sys_user 用户表进行查找用户是否存在

5、用户存在,直接登录

6、用户不存在,进入到提示注册页面

7、使用步骤1生成二维码时,可先从服务端返回对应的参数

@RequestMapping(value = "/pre")@ResponseBodypublic Map<String,String> pre(HttpServletRequest request){Map<String,String> map = new HashMap<String, String>();map.put("AppId", Global.getConfig("weixin.open.AppId"));map.put("redirect_url", Global.getConfig("weixin.open.redirect_url"));map.put("state", IdGen.uuid().toUpperCase());String key =map.get("state");WechatCacheUtils.put(key, key);return map;}

8、伪代码逻辑如下:

@SuppressWarnings("unchecked")@RequestMapping(value = "/login")public Object login(String code ,String state , Model model , HttpServletRequest request) throws IOException {if(StringUtils.isBlank(code) || StringUtils.isBlank(state)) {model.addAttribute("message","state or code 参数错误!");return "error/invalid";}logger.debug("code , {}" , code);logger.debug("state , {}" , state);String key =state;Object attribute = WechatCacheUtils.get(key);// 1、state 参数校验if(null == attribute || !state.equals(attribute.toString())) {model.addAttribute("message","非法请求!");return "error/invalid";}WechatCacheUtils.remove(key);// 2、获取AccessTokenString openAccessToken = WechatCacheUtils.getOpenAccessToken(code);logger.debug("openAccessToken , {}" , openAccessToken);Map<String,String> resMap = (Map<String,String>)JsonMapper.fromJsonString(openAccessToken, Map.class);// 3、获取用户个人信息 String url = WechatConstant.WEIXIN_OPEN_USERINFO.concat("access_token=").concat(resMap.get("access_token")).concat("&openid=").concat(resMap.get("openid"));logger.debug("获取用户个人信息url, {}" , url);Map<String,String> res = new HashMap<String, String>();String doGet = null ;try {doGet = HttpClientUtils.doGet(url);logger.debug("获取用户个人信息,如下: {}" , doGet);res = (Map<String,String>)JsonMapper.fromJsonString(doGet, Map.class);} catch (IOException e) {e.printStackTrace();}if(StringUtils.isBlank(res.get("unionid"))) {// 接口调用失败,无法获取到 unionidlogger.error("获取用户信息失败, 用户信息接口返回数据如下: {}" , doGet);model.addAttribute("message","微信接口错误,请重试!");return "error/invalid";}User temp = new User();temp.setWechatUid(res.get("unionid"));temp.setNumber(1);// 4、根据用户唯一标识,判断是否存在 wechatUidList<User> findList = systemService.existsUserByCondition(temp);if(CollectionUtils.isEmpty(findList)) {// 不存在,跳转到提示到小程序注册页面return "modules/sys/guideWechat";}// 存在,调用shiro 进行登录 Subject subject = SecurityUtils.getSubject();UsernamePasswordToken passwordToken = new UsernamePasswordToken();passwordToken.setUsername(findList.get(0).getLoginName());passwordToken.setPassword(findList.get(0).getPassword().toCharArray());passwordToken.setUnpass(true); // 免密码登录验证subject.login(passwordToken);// 登录成功,跳转到登录管理页面return "redirect:"+adminPath+"/login";}

 

三、总结

1、创建网站应用步骤 --- 授权回调域 , 可以随便修改,且及时生效的

 

2、本地调试办法,使用内网穿透,映射一个本地地址即可。参考: Java 微信支付通知本地调试解决办法

3、扫码登录后,若网站使用shiro作为登录管理,建议参考: Shiro实现免密码登录。

4、调试的时候,可以使用第一种方法生成二维码,无需校验state

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 

 

 

若不明白,欢迎留言沟通,谢谢~

 

 

参考资料: Java后端调用其他服务接口

            Shiro 实现免密码登录策略

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_742203.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

织梦更新主页html慢,织梦后台更新网站HTML卡死的解决方法

按下面方法一一检查和解决1、新建过模型&#xff0c;没有给新建模型添加对应的模板(此图片来源于网络&#xff0c;如有侵权&#xff0c;请联系删除! )解决方法&#xff1a;检查自定义模型的栏目是否有在模板目录里加入了新模型对应的模板。例如&#xff1a;index_ch17.html ist…

手机网站form表单check神器——Validform

版权声明&#xff1a;欢迎转载&#xff0c;请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/74258614 手机端的商城项目已经上线了很久&#xff0c;但一直留有令人耿耿于怀的问题——form表单没有找到合适的validate&#xff0c;也就是说项目的input标签…

全球最大同性交友网站GitHub发布了年度开发者报告,提到了这些关键数据

编辑 | 雨多田光 10 月 10-12 日&#xff0c;GitHub Universe 大会在旧金山召开&#xff0c;GitHub 官网也发布了 2017 年年度数据报告。今年的数据让人眼前一亮&#xff0c;我们将目光聚焦在其中几个点上。 语言 /Grand Order 因为存在“语言之争”这个梗&#xff0c;我们先看…

个人网站运营故事经验分享

个人网站在中国互联网中一直处于弱势群体&#xff0c;不受待见的行列&#xff0c;要流量没流量、要权重没权重&#xff0c;可谓要啥没啥。但正因为有了个人网站的存在才支撑了中国互联网的半边天。接下来我将会详细介绍个人网站运营优化&#xff0c;以及对个人经验进行分享。下…

lnmp0.9+wordpress网站部分报502错误

背景&#xff1a;快过年了&#xff0c;最近公司事真多&#xff0c;忙的不亦乐乎&#xff0c;瞎忙。外网一台服务器&#xff0c;安装的是lnmp0.9wordpress.最近出现两个问题&#xff1f;&#xff1f;&#xff08;1&#xff09;后台打开插件和外观选项是就报502错误&#xff0c;其…

【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

一、负载均衡&#xff1a;必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术&#xff0c;集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务&#xff0c;这些集群可以是Web应用服务器集群&#xff0c;也可以是数据库服…

idhttp用post请求页面body_从零开始用flask搭建网站六

用户个人主页现在我们来写一个用户个人主页&#xff0c;请求url为/user/<username>app/routes.py: User profile view functionapp.route(/user/<username>) login_required def user(username):user User.query.filter_by(usernameusername).first_or_404()posts…

从小白进阶,三分钟教你如何编写伪静态实现网站页面响应

从小白进阶&#xff0c;三分钟教你如何编写伪静态实现网站页面响应伪静态简介&#xff1a;伪静态是相对真实静态来讲的。伪静态并不是真正的静态&#xff0c;实质上也是动态页面。伪静态有何作用&#xff1a;伪静态页面&#xff0c;其目的是为了更好的被搜索引擎收录而通过一定…

html如何隐藏pc端图片,自适应网站PC端隐藏移动端显示教程

有朋友求助我的网站是自适应设计&#xff0c;最近有个广告位图片PC端和移动端都显示&#xff0c;为了不影响手机端用户体验&#xff0c;我想把移动端广告隐藏&#xff0c;该怎么办呢&#xff1f;接下来我教大家怎么实现PC端显示移动端隐藏方法。1、CSS控制判断实现移动端隐藏方…

开源网站流量统计系统Piwik源码分析——参数统计(一)

Piwik现已改名为Matomo&#xff0c;这是一套国外著名的开源网站统计系统&#xff0c;类似于百度统计、Google Analytics等系统。最大的区别就是可以看到其中的源码&#xff0c;这正合我意。因为我一直对统计的系统很好奇&#xff0c;很想知道里面的运行原理是怎么样的&#xff…

php 百度竞价跳转代码,百度搜索关键词进网站的跳转到另外一个网站的实现方案...

很多时候&#xff0c;百度竞价或者是百度搜索进来关键词的时候需要做个跳转。前段时候有个客户让做了这样的一个效果。现在总结一下&#xff0c;给后来人做个参考。先说实现思路&#xff1a;1、我们先确定做跳转可能用到的是三种方法&#xff1a;①、服务器跳转&#xff0c;普遍…

查询网站的服务器时间限制,网站服务器时间查询工具

网站服务器时间查询工具 内容精选换一换备案是中国大陆的一项法规&#xff0c;使用大陆节点服务器提供互联网信息服务的用户&#xff0c;需要在服务器提供商处提交备案申请。根据工信部《互联网信息服务管理办法》(国务院292号令)和工信部令第33号《非经营性互联网信息服务备案…

关于网站被挂马的症状以及处理解决方法

2019独角兽企业重金招聘Python工程师标准>>> 如今绝大多数站长都在想着怎么建设外链&#xff0c;怎么发布网站内容&#xff0c;把自己网站的弄到首页或是前三位&#xff0c;网站安全其实也需要站长们注意&#xff0c;因为一旦网站安全出了问题&#xff0c;网站的排名…

手机网站按住放大图片_HTML5 手机图片触摸放大效果

JavaScript语言&#xff1a;JaveScriptBabelCoffeeScript确定(function(e, t) {var n ["touchstart", "touchmove", "touchend"];e.enlarge function(e, t, i) {var s document.getElementById(e);var a s.getElementsByTagName("img&q…

基于埋点日志数据的网络流量统计(网站总浏览量(PV)的统计)

衡量网站流量一个最简单的指标&#xff0c;就是网站的页面浏览量&#xff08;Page View&#xff0c;PV&#xff09;。用户每次打开一个页面便记录1次PV&#xff0c;多次打开同一页面则浏览量累计。 一般来说&#xff0c;PV与来访者的数量成正比&#xff0c;但是PV并不直接决定…

基于埋点日志数据的网络流量统计(网站独立访客数(UV)的统计)

在实际应用中&#xff0c;我们往往还会关注&#xff0c;到底有多少不同的用户访问了网站&#xff0c;所以另外一个统计流量的重要指标是网站的独立访客数&#xff08;Unique Visitor&#xff0c;UV&#xff09; 1.假设我们已经采集到数据UserBehavior&#xff0c;并将数据放在…

由12306.cn谈谈网站性能技术

12306.cn网站挂了&#xff0c;被全国人民骂了。我这两天也在思考这个事&#xff0c;我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促&#xff0c;而且完全基于本人有限的经验和了解&#xff0c;所以&#xff0c;如果有什么问题还请大家一起讨论和指正。&#xff0…

jmeter对http get网站访问压力测试

一 安装 下载jdk安装包 http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html 根据操作系统选择对应的包安装&#xff0c; 下载好安装包后&#xff0c;直接根据提示安装 下载apache jmeter安装包 http://jmeter.apache.org/download_jmeter.…

PHP大型电商网站秒杀思路

秒杀/抢购 技术&#xff1a;高可用&#xff0c;高并发 市场&#xff1a;用户体验&#xff0c;曝光度&#xff0c;促销 秒杀放单独服务器&#xff0c;这样即使崩溃不影响网站其他功能。 高可用&#xff1a;双活。 高并发&#xff1a;负载均衡&#xff0c;安全过滤。 阿里云…

手把手教你入侵网站修改数据_一天之内建好个人网站,手把手教你全过程

建个网站一年多少钱&#xff1f;如何自己搭建一个个人网站? 如何逐步构建一个优秀的外贸网站&#xff1f; 如果你有这些问题&#xff0c;那你看完我写的这次实际建站的过程&#xff0c;你就应该全明白了。首先看一下实际的费用。我在阿里云申请的域名http://www.tianjiju.com和…