JAVA-快速接入第三方应用登录(QQ、微信、微博)
前言:如何快速接入第三方登录?无需第三方审核认证授权,一次性接入多个平台的解决方案,
此处实现使用SpringBoot+vue 实现此效果
1.申请接入应用
http://open.51094.com/
按需选择接入的类型
填写应用信息
完成应用创建后
2.前端配置
引入js
因为.vue文件中 只能存在一个<script>
标签,那咋办?
使用编码声明的方式将js配置成一个组件
上面的src就是你应用的此处地址
在页面中编写此代码
//引入组件 相当于 引入<script> 引用js
<scriptLink></scriptLink>
//第三方应用图标渲染的位置
<span id="hzy_fast_login"></span>
出现此图标你就成功渲染成功了
但是。。。你会不会觉得这图标有点丑。想使用自己的样式
打开F12找到QQ的logo 查看此链接 放在你自己的图标上即可
3.后端配置
先写一下接入第三方配置
读取配置类
package com.github.ucenter.config;import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/**
* @author: lujie
* @create: 2020/3/30
* @description: ConstantPropertiesUtil
**/
@Component
public class ConstantPropertiesUtil implements InitializingBean {@Value("${oauth.appid}")private String oauthAppId;@Value("${oauth.token}")private String oauthToken;public static String OAUTH_APPID;public static String OAUTH_TOKEN;public static String OAUTH_TYPE;@Overridepublic void afterPropertiesSet() throws Exception {OAUTH_APPID = oauthAppId;OAUTH_TOKEN = oauthToken;OAUTH_TYPE ="get_user_info";}}
**创建HTTP 调用工具类 ,方便后面获取回调code 进行获取用户登录信息
**
package com.github.commonutils.utils;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;/**
* @author: lujie
* @create: 2020/4/19
* @description: HttpRequest
**/
public class HttpRequest {/*** 向指定URL发送GET方法的请求 ** * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果*/public static String sendGet(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.out.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}} catch (Exception e2) {e2.printStackTrace();}}return result;}/*** 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果*/public static String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}//使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}} return result;}
}
创建微信回调接口
要保证你填写的这个地址能访问到你的接口
**
package com.github.ucenter.controller;import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.commonutils.constants.CommonConstant;
import com.github.commonutils.utils.HttpRequest;
import com.github.commonutils.utils.JwtUtils;
import com.github.ucenter.config.ConstantPropertiesUtil;
import com.github.ucenter.entity.UcenterMember;
import com.github.ucenter.service.UcenterMemberService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/**
* @author: lujie
* @create: 2020/4/19
* @description: WeChatCallbackController 微信回调接口函数
**/
@Controller
@Slf4j
public class WeChatCallbackController {@Resourceprivate UcenterMemberService ucenterMemberService;@GetMappingpublic void WeChatCallback(@RequestParam("code") String code, HttpServletResponse response) throws IOException {log.info("=================================第三方登录唯一标识:"+code);String baseURL = "http://open.51094.com/user/auth.html";String params = "type=get_user_info&code="+code+"&appid="+ConstantPropertiesUtil.OAUTH_APPID+"&token="+ConstantPropertiesUtil.OAUTH_TOKEN;String result = HttpRequest.sendPost(baseURL, params);JSONObject jsonObject = JSONObject.parseObject(result);String name = jsonObject.getString("name");String img = jsonObject.getString("img");Integer sex = jsonObject.getInteger("sex");String from = jsonObject.getString("from");String openId = jsonObject.getString("uniq");UcenterMember user =null == ucenterMemberService.getByOpenId(openId)?new UcenterMember():ucenterMemberService.getByOpenId(openId);user.setNickname(name);user.setOpenid(openId);user.setAvatar(img);user.setSex(sex);/***新用户注册*/if(StrUtil.isBlank(user.getId())){user.setAge(CommonConstant.DEFAULT_AGE);ucenterMemberService.save(user);//登录}else {ucenterMemberService.updateById(user);}//此处跳转首页String token = JwtUtils.getJwtToken(user.getId(),user.getNickname());response.sendRedirect("http://127.0.0.1:3000?token="+token) ;}}
有问题在底下留言!!!啾咪~
JAVA-快速接入第三方应用登录(QQ、微信、微博)相关推荐
- Oauth2.0 QQ微信微博实现第三方登陆
一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...
- Java实现鼠标右键快捷保存QQ微信截图和复制的文字
Java实现鼠标右键快捷保存QQ微信截图和复制的文字 首先,我们能实现保存剪贴板内容,以下是我的源代码和解释 import java.awt.*; import java.awt.datatransf ...
- 实现在App端授权qq/微信/微博登录
App端登陆相关的SDK需要在manifest中配置: 打开 manifest.json -> App模块权限配置,勾选 OAuth(登陆鉴权). 打开 manifest.json -> ...
- 安卓三方登录趟坑,QQ,微信,微博,Twitter,Facebook,Instagram
前言 最近给app加入三方登录,由于比较多,所以就用的友盟统一登录,会比一个一个配置方便点 正文 先说QQ,微信,微博: 国内QQ,微信,微博三方登录其实还行,并没有太多坑,文档也挺完善的. 但是需要 ...
- 近期你已经授权登录过_微信上怎么登录QQ 微信和qq有什么实质区别
参加工作之后,大多数人都将自己常用的聊天软件换成了微信,QQ也渐渐不再使用.但是,QQ中基本上都是小学.初中.高中的好友以及同学,这些人的消息我们也是不想错过的.近期,有网友称微信上可登录QQ,那么微 ...
- 访问量分类统计(QQ,微信,微博,网页,网站APP,其他)
刚准备敲键盘,突然想起今天已经星期五了,有点小兴奋,一周又这么愉快的结束,又可以休息了,等等..我好像是来写Java博客的,怎么变成了写日记,好吧,言归正传. 不知道大家有没有遇到过这样的需求:统计一 ...
- java qq微信微博第三方登录界面_android 实现第三方登录(微博、微信、QQ登录)
[实例简介]此案例是演示案例,大家可以看到Bmob的第三方登录和信息获取如何工作的 实现了 qq.微信.微博的 第三方登录功能 [实例截图] [核心代码] package com.bmob.demo. ...
- Android三方登陆之QQ,微信,微博登录及注意事项
简介 在我们的应用中,一般都有三方登录这个功能,对于这个常用的功能,我们一般会有如下处理方式 导入三方sdk,按照文档开发 使用如ShareSDK类三方组件来实现 ShareSDK 官方Demo: T ...
- QQ微信微博联合登录流程总结
第三方联合登录一般可以降低网站的获客成本,所以一般的网站都会做一些联合登录,常用的就是QQ.微信.微博了,下面简单的介绍一下这些联合登录的方法. 看了一号店的QQ登录源码可知,点击图标直接访问的是这个 ...
最新文章
- 特征工程(七)SelectFromModel
- Jmeter Loadrunner高级性能测试真实曝光
- 采用三层架构(JAVA)设计学生管理系统
- elasticsearch之Recovery
- 条款20:为指针的关联容器指定比较类型
- 【iVX 初级工程师培训教程 10篇文拿证】07 08 新闻页制作
- [转]sql,N/$/#/@的含义和作用
- maven项目,如何导入本地jar包
- php 如何配置 redis,php 如何设置redis
- 变相裁员?人人车发奇葩通知:未离职员工每天打卡三次 只抄规则
- C中的volatile用法
- Bzoj 3932: [CQOI2015]任务查询系统(主席树)
- Java面试题及答案整理 2022 年 8 月最新版
- 《微信小程序进阶实战之分答应用开发(中级项目)》(完整版)
- 日了。这个竟然还不让发
- antd中table组件中如何进行换行操作(react中)
- 代数基础 | Kronecker积
- 常用逻辑用语知识点【初级和中阶辅导】
- 小米5怎样升级android,小米5开发版怎么升级Android 7.0?小米5开发版升级Android 7.0教程...
- PTA 7-2 大炮打蚊子