.net mvc 获取iis基本登录网站登录账号_超赞!用Java实现了第三方qq账号登录...

news/2024/5/9 14:37:28/文章来源:https://blog.csdn.net/weixin_39921504/article/details/111175437
72a9f77e0b0f28e1bfb3ac2fb91f1ab7.png

传智汇

传智播客旗下IT互联网精英社区

作者:人间蒸发

来源:zuidaima.com/blog/4725615031700480.htm

QQ互联注册一个账号

网站地址:https://connect.qq.com/,添加一个应用,具体怎么申请以及需要填写的信息,腾讯官网有详细文档。注册并完成相应信息填写后,可以在应用管理中查到应用的APP ID和APP Key。

成功后如下图:

a77471a5b3d748b2072f37793795d32c.png

还需要添加一个回调地址,如下图:

7a6cfba52f8eff78aacfa706d8b12b2c.png加入jar包
com.qqSdk4J2

登录页面

type="submit" class="btn btn-default" onclick="qqLogin()">qq登录
function qqLogin() {
   window.open("/login/qqLogin","TencentLogin");
}

Controller编写

package com.gbq.boot.web.controller;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.gbq.boot.web.bean.User;
import com.gbq.boot.web.comment.qqLoginComment.AuthComment;
import com.gbq.boot.web.service.UserService;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
 * 登录Controller
 * @author 阿前
 * 2019年1月4日09:48:21
 */
@RestController
@RequestMapping("/login")
public class LoginController {
    @Resource
    private UserService userService;
    @Resource
    private AuthComment authComment;
    @RequestMapping("/index")
    public ModelAndView index(@ModelAttribute("user") User user) {return new ModelAndView("/shop/index","user",user);
    }
    @RequestMapping("/login.html")
    public ModelAndView toLogin() {return new ModelAndView("login");
    }
    @RequestMapping("/qqLogin")
    public void qqLogin(HttpServletResponse response)throws Exception{
        //随机产生字符串
        String state = StrUtil.uuid();
        String url = authComment.getAuthUrl(state);
        System.out.println(url);
        //重定向
        response.sendRedirect(url);
    }
    @GetMapping("/redirect")
    public ModelAndView getData(@RequestParam(value = "code") String code, RedirectAttributes model){
        //获取token
        String accessToken = authComment.getAccessToken(code);
        System.out.println("accessToken"+accessToken);
        //获取openId
        String openId = authComment.getOpenId(accessToken);
        System.out.println("openId"+openId);
        //获取用户信息
        JSONObject userInfo = authComment.getUserInfo(accessToken, openId);
        String myName = userInfo.getString("nickname");
        User user = new User(null, "","111111",myName, System.currentTimeMillis(),"是",
                userInfo.getString("figureurl_2"), userInfo.getString("gender")
                ,1,1,"", "", openId);
        //通过openId查询
        User usr = userService.findUsrByOpenId(openId);if (null != usr){
            user.setId(usr.getId());
            userService.updateById(user);
        }else {
            userService.insert(user);
        }
        model.addFlashAttribute("user", user);
       //重定向return new ModelAndView("redirect:/login/index");
    }
}

AuthComment类编写

package com.gbq.boot.web.comment.qqLoginComment;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.apache.commons.io.IOUtils.toByteArray;
@Component
public class AuthComment {
    //QQ 登陆页面的URL
    private final static String AUTHORIZATION_URL ="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=%s&redirect_uri=%s&scope=%s";
    //获取token的URL
    private final static String ACCESS_TOKEN_URL = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=%s&client_secret=%s&code=%s&redirect_uri=%s";
    // 获取用户 openid 的 URL
    private static final String OPEN_ID_URL = "https://graph.qq.com/oauth2.0/me?access_token=%s";
    // 获取用户信息的 URL,oauth_consumer_key 为 apiKey
    private static final String USER_INFO_URL = "https://graph.qq.com/user/get_user_info?access_token=%s&oauth_consumer_key=%s&openid=%s";
    // 下面的属性可以通过配置读取
    // QQ 在登陆成功后回调的 URL,这个 URL 必须在 QQ 互联里填写过
    private static final String CALLBACK_URL = "http://127.0.0.1:8080/login/redirect";
    // QQ 互联应用管理中心的 APP ID
    private static final String APP_ID = "你的id";
    // QQ 互联应用管理中心的 APP Key
    private static final String APP_SECRET = "你的key";
    /**
     * QQ 登陆页面的URL
     * @param scope
     * @return
     */
    public String getAuthUrl(String scope) {return String.format(AUTHORIZATION_URL, APP_ID, CALLBACK_URL, scope);
    }
    /**
     * 获取Access Token值
     */
    public String getAccessToken(String code){
        String ur = String.format(ACCESS_TOKEN_URL, APP_ID, APP_SECRET,code, CALLBACK_URL);
        String compile = "access_token=(\\w*)&";
        String result = this.getUrl(ur);return this.getMatcher(result,compile);
    }
    /**
     * 获取openId
     * @param accessToken
     * @return
     */
    public String getOpenId(String accessToken) {
        String url = String.format(OPEN_ID_URL, accessToken);
        String compile = "openid\":\"(\\w*)\"";
        String result = this.getUrl(url);return this.getMatcher(result,compile);
    }
    /**
     * 获取qq用户信息
     * @param accessToken
     * @param openId
     * @return
     */
    public JSONObject getUserInfo(String accessToken, String openId) {
        String url = String.format(USER_INFO_URL, accessToken, APP_ID, openId);
        String result = this.getUrl(url);return JSON.parseObject(result);
    }
    private String getMatcher(String result,String compile) {
        //使用正则表达式解析网址
        Pattern p = Pattern.compile(compile);
        Matcher m = p.matcher(result);
        m.find();return m.group(1);
    }
    //解析url
    private String getUrl(String ur) {
        try {
            URL url = new URL(ur);
            HttpURLConnection conn = null;
            conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5 * 1000);
            conn.setRequestMethod("GET");
            InputStream inStream = conn.getInputStream();
            byte[] data = toByteArray(inStream);
            String result = new String(data, "UTF-8");
            System.out.println(result);return result;
        } catch (IOException e) {
            e.printStackTrace();
        }return  null;
    }
}

此处不再编写userService

成功会返回json串

其中主要需要的是,nickname——qq名称,figureurl_qq_x——不同尺寸的qq头像,等等等等!

登录成功跳转到页面

7e990a7f1855a8b0b7a6330c397e8250.png

dbb65a5f5db37e5002adbff41790f3ee.png成功后的页面index

注意我使用的是freemarker模板,给大家贴上freemarker配置,已经mvc配置

org.springframework.bootspring-boot-starter-freemarkerfreemarker:
  template-loader-path: classpath:/templates/# 是否启用模板缓存。
  suffix: .ftl
  cache: false# 模板编码。
  charset: UTF-8# 是否检查模板位置是否存在。
  check-template-location: true
  content-type: text/html#是否启用freemarker
  enabled: true
mvc:
  view:
    prefix: /templates/
    suffix: .html
  static-path-pattern: /static/**

-END-

fa66d12f26ee6b70ff1e9807912ead7a.png

c467f33ee37ec083a6d27cd7c1f73bbf.png

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

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

相关文章

eclipse tomcat新建一个_Eclipse搭建本地动态网站环境

准备Eclipse和Tomcat完成Web容器的配置在Eclipse中配置Tomcat (web容器)1、选择window->show view->other->servers 下面出现了servers点击 no servers are available click this link to create a new server -> 选择Tomcat7(下载的是7)->点击下一步->browe…

sqlite用户名密码_黑客利用工具轻易获取管理员账户密码,你的网站危险了

首先,先简单介绍下sqlmap简介:sqlmap是一种开源的工具,可以自动检测和利用SQL注入以及接入该库的服务器。它拥有非常强大的检测引擎、具有多种特性的器、通过库指纹提取访问底层文件系统并通过外带连接执行命令。支持的数据库:MyS…

服装设计网页制作_小众精选样机在线制作网站,大量免费的模型PSD分层

样机素材是设计行业的专用名词,又叫模板。是设计图案模拟到实物或场景展示的可重复套用模型。是将设计图案应用到一个实物效果图中进行展示,让设计图案看起来更加形象逼真。在国内也称样机素材为:标志模板、模拟机、贴图样机、智能贴图。用途…

kali如何制作php字典_sqlmap如何用dirsearch.py协助osshell拿到目标网站shell

本文首发于FreeBuf→https://www.freebuf.com/sectool/256588.html沙漏安全团队欢迎真正热爱技术的你!SQLMAPsqlmap是一个开源渗透测试工具, 它可以自动检测和利用SQL注入漏洞并接管数据库服务器。它具有强大的检测引擎,同时有众多功能&#…

前端2个下拉框关联_前端SEO优化

前端SEO优化原文链接:https://juejin.im/post/6844903824428105735 作者:dhonor一、搜索引擎工作原理在搜索引擎网站的后台会有一个非常庞大的数据库,里面存储了海量的关键词,而每个关键词又对应着很多网址,这些网址是…

db2 删除索引_网站索引量直在下降是什么原因?

所谓网站索引量,就是指搜索弓|擎把你的网页内容索取到数据库中。简单理解就是网站中有多少页面可以作为搜索候选结果,就是网站的索引量。网站的索引量越高,说明参与排名的机会就越大。那么,在网站SEO优化过程中,索引量一直在下降&…

lnmp一键安装包 linux_搭建属于自己的个人网站(二):LNMP一键安装

接上一篇:搭建属于自己的个人网站(一):域名注册解析及服务器配置本片介绍LNMP一键安装和wordpress安装以及wordpress后台管理模板上传,话不多说,直接上。1、LNMP一键安装(Linux NGINX MySQL PHP)打开Xshell工具,输入…

python编写程序的思路_神级程序员手把手教你写网站Python WEB开发!这个思路满分!...

本次的分享主要围绕以下几个方面: Python WEB开发技术简介 Django简介与环境配置与MVT设计模式简介 开发一个博客站点项目思路 路由编写与模型设计实战 快速开发一个网站后台与试图编写实战 模板设计与编写以及完善博客站点的其他功能Django是采用MVT的设计模式进行…

网站导航颜色停留_营销型网站建设的9步骤,你get了吗?

全网营销的信息时代,单纯的展示型网站仅适合那些不适合开展网络营销的行业,而这些行业也在不断寻找开拓网络营销渠道的办法,如建筑、工程等。在这个时代大背景下,企业营销型网站的比重就越来越大。但是很多企业对互联网的一些知识…

使用C#登录带验证码的网站

我在上一篇文章中已经讲解了一般网站的登录原来和C#的登录实现,很多人问到对于使用了验证码的网站该怎么办,这里我就讲讲验证码的原理和对应的登录方法。 验证码的由来 几年前,大部分网站、论坛之类的是没有验证码的,因为对于一般…

视频网站?电子商务?

从两个不同行业的网站(视频分享、电子商务),看互联网业务平台的特征: 1. 两者的核心都是内容。一个是视频,它的特性是:信息载体、数字化;另一个是商品,它的特性是:…

Step by Step WebMatrix网站开发之二:使用WebMatrix(1)

第一次运行WebMatrix会看到如图1所示的窗口。 图1 第一次运行WebMatrix显示的窗口 我的网站 进入“我的网站”可看到自己设计过的网站。 从Web库创建网站 可以从“从Web库创建网站“中理由网络上开源的网站系统创建网站,如名气比较响的WordPress、phpwind等…

60款高质量的网站模板免费下载(上篇)

您可能还喜欢 分享45款高质量的免费(X)HTML/CSS模板最新30佳精美 PSD 网站模板免费下载寻找网页设计灵感的27个最佳网站推荐60佳灵感来自大自然的网页设计作品欣赏分享100佳精美的作品集网站设计案例当你想快速制作出一个网站的时候,网站模板就非常有用了。学习网页…

java 学习网站_JAVA程序员学习必备十大网站

作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站。以下本人收集的 Java 开发者必备的网站,这些网站可以提供信息、以及一些很棒的讲座 , 还能解答一般问题、面试问题等,或许你会认为…

linux测试网页装载时间,如何使用curl命令测试网站加载速度

Curl命令是一种用于通过各种协议传输数据的工具。有了它,我们就可以非常准确的知道网站的加载时间。使用此命令,我们可以看到:请求收到响应之前的总时间(time_namelookup)TCP协议在远程服务器上完成的总时间(time_connect)文件传输开始的时间…

网站使用QQ登陆

上几天我朋友说他知道怎么实现网站使用QQ号登陆或者注册了,于是要他发给我学习,感觉好复杂,而且运行不了(主要万原因是因为这东西得上传到空间是实验),于是在博客园找了相关的资料,发现在也并不…

腾讯天堂最新服务器,天堂官方网站-腾讯游戏

亲爱的玩家:我们感谢您,成为了《天堂》世界的勇士;我们感谢您,伴随《天堂》十年,不离不弃;我们更感谢您,给我们如此多的批评建议,一切皆因您真心热爱这个游戏。而面对如此热爱《天堂…

测试网站速度的五个免费在线工具

如果你认为一个网站建成后,工作就已经完成,你就大错特错了。你需要不断监测其可用性和可访问性,一个小问题,可能毁了一切。而网页载入速度对于一 个网站来讲至关重要,试想一下,你喜欢进一个需要很长时间才载…

MSDN全球网站大改版

MSDN全球网站大改版如果你现在登录http://msdn.microsoft.com 的话,你会发现发现一个非常重大的改变;微软对MSDN进行了有史以来最大规模的一次改版。记得2周前曾经和MSDN国际化开发团队的负责人Brad聊了一下新版的msdn,当时他介绍了很多新版M…

自定义app_offline.htm,让网站升级提示更专业

用 VS2005 发布新网站时,VS会自动上传个 app_offline.htm 到网站上。这时,所有的网站连接都成为如下图所示:提示信息对开发者来说,有点用处。但是,对于正在访问中用户来说,实在是蹩脚。那么,如何让升级的时…