微博登录、微信登录、qq登录java技术实现

简介:

为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注册的的需求也就由此而诞生


wKiom1fzcGmw7PCJAAIosTb8rHY899.png-wh_50


1、微信

 1) 微信登录也是最坑人的,需要花300大洋成为开发者账户,没办法谁让微信用户群体大呢所以也就只好认了;然后登录网站后台需要创建网站应用,填写授权回调域(登录网站的域名)只填写域名即可

申请地址: https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN

 2)查看微信提供的接口,写java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
     public  void  wx() {
         try  {
             response.sendRedirect( "https://open.weixin.qq.com/connect/qrconnect?appid="
                     + ShareLoginDict.WEIXINKEY.getState()
                     "&redirect_uri="
                     + URLEncoder.encode(ShareLoginDict.WEIXINURL.getState()) 
                     "&response_type=code&scope=snsapi_login&state=66666#wechat_redirect" );
         catch  (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
 
@Override
     public  Result userwx(String return_code) {
         Result result =  new  Result();
         Map<String, Object> token = (Map<String, Object>) WeiXinAPI
                 .getToken(return_code);
         if  (token !=  null  && token.get( "access_token" ) !=  null ) {
             Map<String, Object> user = (Map<String, Object>) WeiXinAPI
                     .getWxUser(token.get( "access_token" ).toString(),
                             token.get( "openid" ).toString());
             if  (user !=  null ) {
                 result.addModel( "openid" , user.get( "openid" ));
                 result.addModel( "nickname" , user.get( "nickname" ));
                 result.addModel( "headimgurl" , user.get( "headimgurl" ));
                 result.addModel( "data" "data_success" );
             } else {
                 result.addModel( "data" "data_null" );
             }
         } else {
             result.addModel( "data" "data_null" );
         }
         return  result;
     }

当用户通过微信登录时,调用微信接口获取用户接口返回微信端的openid,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。


2、qq登录

 1)qq互联创建应用

接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。

申请appid和appkey的用途

 appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。

appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。

申请地址: http://connect.qq.com/intro/login/

 2)查看QQ提供的接口,写java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public  void  qq() {
         try  {
             response.sendRedirect( "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
                     + ShareLoginDict.QQKEY.getState()
                     "&redirect_uri="
                     + ShareLoginDict.QQURL.getState() +  "&scope=get_user_info" );
         catch  (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
 
@Override
     public  Result userqq(String return_code) {
         Result result =  new  Result();
         Map<String, Object> token = (Map<String, Object>) QQAPI
                 .getToken(return_code);
         if  (token !=  null  && token.get( "access_token" ) !=  null ) {
             Map<String, Object> tokenme = (Map<String, Object>) QQAPI
                     .getTokenMeOpenId(token.get( "access_token" ).toString());
             if  (tokenme !=  null  && tokenme.get( "openid" ) !=  null ) {
                 Map<String, Object> user = (Map<String, Object>) QQAPI
                         .getQqUser(token.get( "access_token" ).toString(),
                                 tokenme.get( "openid" ).toString());
                 if  (user !=  null ) {
                     result.addModel( "openid" , tokenme.get( "openid" ));
                     result.addModel( "nickname" , user.get( "nickname" ));
                     result.addModel( "figureurl" , user.get( "figureurl" ));
                     result.addModel( "data" "data_success" );
                 } else {
                     result.addModel( "data" "data_null" );
                 }
             } else {
                 result.addModel( "data" "data_null" );
             }
 
         } else {
             result.addModel( "data" "data_null" );
         }
         return  result;
     }  


当用户通过QQ登录时,调用QQ接口获取用户接口返回QQ端的openid,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。

3 微博登录

 1)微博创建应用

  申请地址:http://open.weibo.com/authentication

 2)查看微博提供的接口,写java代码

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public  void  wb() {
         try  {
             response.sendRedirect( "https://api.weibo.com/oauth2/authorize?client_id="
                     + ShareLoginDict.WEIBOKEY.getState()
                     "&redirect_uri="
                     + ShareLoginDict.WEIBOURL.getState()
                     "&response_type=code" );
         catch  (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
 
@Override
     public  Result userwb(String return_url, String return_code) {
         Result result =  new  Result();
         Map<String, Object> token = (Map<String, Object>) WeiBoAPI.getToken(
                 return_url, return_code);
         if  (token !=  null  && token.get( "access_token" ) !=  null ) {
             Map<String, Object> user = (Map<String, Object>) WeiBoAPI
                     .getWbUser(token.get( "access_token" ).toString(),
                             token.get( "uid" ).toString());
             if  (user !=  null ) {
                 result.addModel( "name" , user.get( "screen_name" ));
                 result.addModel( "pic" , user.get( "avatar_large" ));
                 result.addModel( "idstr" , user.get( "idstr" ));
                 result.addModel( "data" "data_success" );
             } else {
                 result.addModel( "data" "data_null" );
             }
         } else {
             result.addModel( "data" "data_null" );
         }
         return  result;
     }

当用户通过微博登录时,调用微博接口获取用户接口返回微博端的idstr,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。










本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/1858721,如需转载请自行联系原作者
目录
相关文章
|
14天前
|
NoSQL Java 数据库连接
深入探索 Java 后台开发的核心技术
【4月更文挑战第5天】本文探讨了Java后台开发的关键技术,包括Spring框架与Spring Boot的使用,MyBatis和Hibernate的ORM选择,关系型与NoSQL数据库的适用场景,线程池与异步处理在并发中的作用,微服务架构及RESTful API设计。这些核心技术有助于开发者打造稳定、高性能的Java后台系统,适应不断发展的云计算和人工智能需求。
|
1月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
7天前
|
小程序 前端开发 JavaScript
微信小程序全栈开发中的PWA技术应用
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中PWA技术的应用,PWA结合Web的开放性和原生应用的性能,提供离线访问、后台运行、桌面图标和原生体验。开发者可利用Service Worker实现离线访问,Worker处理后台运行,Web App Manifest添加桌面图标,CSS和JavaScript提升原生体验。实践中需注意兼容性、性能优化和用户体验。PWA技术能提升小程序的性能和用户体验,助力开发者打造优质小程序。
|
21天前
|
存储 SQL Java
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了(二)
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了
42 1
|
21天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
60 0
|
1天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
2天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
20 6
|
3天前
|
监控 前端开发 算法
Java技术体系
Java技术体系(韩顺平老师整理)
7 0
|
13天前
|
存储 安全 Java
Java中实现高效的字符串拼接技术
【4月更文挑战第6天】在Java编程中,字符串拼接是一个常见的操作。然而,由于字符串的不可变性,频繁的拼接操作可能会导致性能问题。本文将探讨Java中实现高效字符串拼接的技术,包括使用StringBuilder类、StringBuffer类以及Java 8中的StringJoiner类。通过对比这些技术的优缺点,我们将为您提供在不同场景下选择合适的字符串拼接方法的建议。
|
21天前
|
存储 安全 Java
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
33 0

热门文章

最新文章