首页 > 其他分享 >Springboot 实现QQ登录(界面跳转)

Springboot 实现QQ登录(界面跳转)

时间:2023-07-14 10:24:15浏览次数:38  
标签:QQ qq Springboot 登录 private https 跳转 type String

Springboot 实现QQ登录(界面跳转)

现在第三方登录已经变成主流app的登录方式了

今天记录一下如何给自己的网站实现第三方登录(这里以QQ登录为例)

准备工作

首先确保你准备好你自己网站的域名: 如https://xxx.com
以及有正常账号密码登录的方式

有很多实现的方式,比如去微信开放平台和 QQ 开放平台
QQ开发平台:https://connect.qq.com/
微信开放平台: https://open.weixin.qq.com/
上面有教程绑定自己的域名

本文尝试最快实现方法

这里我们使用水滴聚合登录免签API
官网:https://uniqueker.top/
在这里插入图片描述

官网创建

在这里插入图片描述
注册好账号之后
在这里插入图片描述
点击右上角用户 用户中心

进来之后点击 用户列表
在这里插入图片描述
点击创建应用
在这里插入图片描述
填好一下信息:

  • 应用名称(随意)
  • 应用首页网站(准备好的域名网址)
  • 回调域名白名单 (完成登录之后返回的网址url)

确认提交
在这里插入图片描述
创建成功啦!

然后点击应用详情
在这里插入图片描述
它会给你几个值,分别是

  • APPID
  • APPKEY

用于接口参数的配置

springboot 配置

打开后端springboot项目的application.yml完成一下配置

# 第三方登录配置 申请地址 https://uniqueker.top/
third:
  config:
    appId: xxxx
    appKey: xxxx
    redirectUrl: xxxx

这里的appId 和 appKey 就是它提供给你的两个参数

redirectUrl 指完成登录之后的返回页面url

这里创建一个配置类,把这些配置属性注入到容器中

@Configuration
@ConfigurationProperties(prefix = "third.config")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ThirdPartyLoginConfig {
    private Integer appId;
    private String appKey;
    private String redirectUrl;

    @Bean
    public ThirdPartyLoginConfig getConfig() {
        return new ThirdPartyLoginConfig(appId, appKey, redirectUrl);
    }
}

配置完成

查看水滴给我们提供的qq登录接口

调用登录接口

1.跳转登录地址接口

请求URL:https://uniqueker.top/connect.php?act=login&appid={你的appid}&appkey={你的appkey}&type={登录方式}&redirect_uri={返回地址}

其中登录方式type值对应
在这里插入图片描述
返回格式:

{
	“code”: 0,
	“msg”: “succ”,
	“type”: “qq”,
	“url”: “https:// graph.qq.com/oauth2.0/XXXXXXXXXX”
}

在这里插入图片描述

2.编写测试Controller

写一个简单的测试类
(以下代码无法直接调用,用到了好多工具类!!!)


@Resource
private ThirdPartyLoginConfig thirdPartyLoginConfig;

@GetMapping("/qqLogin")
public String qqLogin() throws IOException {
    String requestUrl = String.format("https://uniqueker.top/connect.php?act=login&appid=%s&appkey=%s&type=qq&redirect_uri=%s",
            thirdPartyLoginConfig.getAppId(), thirdPartyLoginConfig.getAppKey(), thirdPartyLoginConfig.getRedirectUrl());
    CloseableHttpClient client = null;
    CloseableHttpResponse response = null;
    try {
        client = HttpClients.createDefault();
        HttpGet request = new HttpGet(requestUrl);
        response = client.execute(request);
        String responseBody = EntityUtils.toString(response.getEntity());
        QQLoginVo qq = new Gson().fromJson(responseBody, QQLoginVo.class);
        return qq.getUrl();
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        assert response != null;
        response.close();
    }
}

这里QQLoginVo需要自己封装一下信息

@Data
public class QQLoginVo {
    private Integer code;
    private String msg;
    private String type;
    private String url;
}

相当于我们主动访问这个url 同时加上自己的请求参数

登录地址为返回的url的值。

3.登录成功

会自动跳转到指定的redirect_uri,并跟上Authorization Code

例如回调地址是:www.qq.com/my.php,则会跳转到:
http:// www.qq.com/my.php?type=qq&code=520DD95263C1CFEA0870FBB66E

4.获取用户信息

通过Authorization Code获取用户信息

请求URL: https:// uniqueker.top/connect.php?act=callback&appid={appid}&appkey={appkey}&type={登录方式}&code={code}

返回格式:

{
	“code”: 0,
	“msg”: “succ”,
	“type”: “qq”,
	“access_token”: “89DC9691E274D6B596FFCB8D43368234”,
	“social_uid”: “AD3F5033279C8187CBCBB29235D5F827”,
	“faceimg”: “https:// thirdqq.qlogo.cn/g?b=oidb&k=3WrWp3peBxlW4MFxDgDJEQ&s=100&t=1596856919”,
	“nickname”: “大白”,
	“location”: “XXXXX市”,
	“gender”: “男”,
	“ip”: “1.12.3.40”
}

在这里插入图片描述

跳转成功界面如下:

标签:QQ,qq,Springboot,登录,private,https,跳转,type,String
From: https://www.cnblogs.com/gen1us/p/17552967.html

相关文章

  • SpringBoot是接到一个http请求就开启一个线程处理吗?
    1、跳出一个误区:SpringBoot不处理任何请求Spring本身并不进行Web的处理,无论是TCP连接也好还是请求和响应也好,这些都是在Spring以外的部分完成的,例如Tomcat,所以默认的SpringBoot将会集成Tomcat内嵌容器。Controller中收到的请求,都是经过Tomcat容器解析后交给Ser......
  • springboot redis工具类之StringRedisTemplate 使用
    1、StringRedisTemplate是什么?StringRedisTemplate继承自RedisTemplate类,实现了BeanClassLoaderAware,Aware,InitializingBean,RedisOperations<K,V>接口。StringRedisTemplate是RedisTemplate以字符串为中心的扩展,由于针对Redis的大多数操作都是基于字符串的,因此此类提供了一个......
  • springboot中使用redis
    1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、配置spring:redis:host:localhost#Redis服务器地址port:6379......
  • javaSpringboot
    目前最流行的框架,JavaSpring的子项目,由它开发 Springboot依赖管理      配置注解  什么是Javabean 有get和set才叫Javabean springboot自定义配置   由MYconfig这个类进行组件myservice配置将其纳入到Spring中  JavaSpr......
  • Springboot实现注解判断权限
    Springboot实现注解判断权限今天记录一下使用springboot的注解来给方法加权限避免了每个方法都需要大量的权限判断超级好用√@目录Springboot实现注解判断权限1.创建权限注解2.定义一个权限的枚举类3.创建拦截器AOP校验权限poincut表达式介绍4.使用注解1.创建权限注解首先......
  • springboot整合kafka
    一、引入依赖(kafka的版本和springboot的版本对不上的话,启动会报错,包类不存在)<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.5.1.RELEASE</version></de......
  • springboot - 整合flyway
    一、概念官网:https://flywaydb.org/数据库版本控制管理工具,通过集成Flyway可以实现启动项目时自动执行项目迭代升级。Flyway已经支持数据库包括:Oracle,SQLServer,SQLAzure,DB2,DB2z/OS,MySQL(includingAmazonRDS),MariaDB,GoogleCloudSQL,PostgreSQL(includ......
  • 我开源了团队内部基于SpringBoot Web快速开发的API脚手架stater
    我们现在使用SpringBoot做Web开发已经比之前SprngMvc那一套强大很多了。但是用SpringBootWeb做API开发还是不够简洁有一些。每次WebAPI常用功能都需要重新写一遍。或者复制之前项目代码。于是我封装了这么一个抽出SpringBootWebAPI每个项目必备需要重复写的模块,和......
  • springboot下遇到的跨域问题
    后端跨域处理springboot项目注解@CrossOrigin实现WebMvcConfigurer接口中addCorsMappings(CorsRegistryregistry)方法配置CorsFilterfilter过滤器使用注意都可以单独使用,全部配置可能会导致不生效的问题addCorsMappings方法@Overridepublic......
  • springboot+vue前后端分离项目发布上线
    首先呢不用多说就是买阿里云服务器,但是呢,学生免费一个月。前端呢就是配置与后端端口 然后呢就是要打包:npmrunbuild把你的dist文件东西进行上传到服务器。后端springboot呢就是要打jar包上传。然后服务器是先去下载配置jdk,然后就是点击网站选择springboot项目最后一步呢......