当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Java实现QQ第三方登录的示例代码

    栏目:Linux/apache问题 时间:2019-11-10 10:12

    前期准备工作

    1.云服务器

    2.备案的域名

    3.本地调试需要修改hosts文件,将域名映射到127.0.0.1

    如何修改hosts文件:https://www.jb51.net/diannaojichu/319774.html

    申请QQ互联,并成为开发者

    申请QQ互联创建应用时需要备案域名,所以建议提前准备备案域名。

    QQ互联:https://connect.qq.com/index.html

    登录后,点击头像,进入认证页面,填写信息,等待审核。

    审核通过后创建应用

    应用创建通过审核后,就可以使用APP ID 和 APP Key

    前期工作就这些了,后面可以开始写代码了。

    项目结构:

    properties或者yml配置文件(这里就是简单的配置了一下,可以自行添加数据库等配置)

    server.port=80
    server.servlet.context-path=/
     
    #qq互联
    qq.oauth.http:QQ互联中申请填写的网站地址

    在pom中添加依赖

    <!--httpclient-->
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.6</version>
    </dependency>
    <!--阿里 JSON-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
    </dependency>

    发送QQ登录请求

    定义全局变量获取配置文件中的网站地址

    @Value("${qq.oauth.http}")
    private String http;

    定义登录回调地址(可以用网站地址拼接或者直接写)

    //QQ互联中的回调地址
    String backUrl = http + "/index";

    登录请求方法代码

    @GetMapping("/qq/login")
    public String qq(HttpSession session) throws UnsupportedEncodingException {
      //QQ互联中的回调地址
      String backUrl = http + "/index";
     
      //用于第三方应用防止CSRF攻击
      String uuid = UUID.randomUUID().toString().replaceAll("-","");
      session.setAttribute("state",uuid);
     
      //Step1:获取Authorization Code
      String url = "https://graph.qq.com/oauth2.0/authorize?response_type=code"+
          "&client_&redirect_uri=" + URLEncoder.encode(backUrl, "utf-8") +
          "&state=" + uuid;
     
      return "redirect:" + url;
    }

    回调返回参数信息说明:

    参数名称 描述
    ret 返回码。详见公共返回码说明#OpenAPI V3.0 返回码。
    msg 如果错误,返回错误信息。
    is_lost 判断是否有数据丢失。如果应用不使用cache,不需要关心此参数。

    0或者不返回:没有数据丢失,可以缓存。
    1:有部分数据丢失或错误,不要缓存。