当前位置: 首页 > news >正文

花都网站建设公司天蝎信息网站文件服务器

花都网站建设公司天蝎信息,网站文件服务器,胶州专业建站,网站后台页面进不去文章目录 网站授权QQ登录QQ登录的完整流程代码示例1. 添加依赖2. 配置文件3. 实现Service4. 创建Controller 网站授权QQ登录 首先需要去QQ互联申请应用填写网站的相关信息#xff0c;以及回调地址#xff0c;需要进行审核。申请流程暂时不说了#xff0c;百度一下挺多申请失… 文章目录 网站授权QQ登录QQ登录的完整流程代码示例1. 添加依赖2. 配置文件3. 实现Service4. 创建Controller 网站授权QQ登录 首先需要去QQ互联申请应用填写网站的相关信息以及回调地址需要进行审核。申请流程暂时不说了百度一下挺多申请失败案例的解决方案的你懂的现在越来越严格了甚至一个错别字都不让有。 QQ登录的完整流程 用户点击QQ登录 用户在你的前端页面点击QQ登录按钮,发送请求到后端。 重定向到QQ授权页面 后端也可以直接重定向到QQ的授权页面,也可以将授权页面的地址返回给前端, 由前端将用户重定向到QQ的授权页面授权页面的地址通常是一个URL类似于https://graph.qq.com/oauth2.0/authorize?response_typecodeclient_idYOUR_APP_IDredirect_uriYOUR_REDIRECT_URIstateYOUR_STATE 其中 YOUR_APP_ID你在QQ开放平台注册应用时获得的APP ID。YOUR_REDIRECT_URI你在QQ开放平台设置的回调URL。YOUR_STATE一个随机字符串用于防止CSRF攻击。 用户授权 用户在QQ的授权页面点击同意授权。 QQ重定向到回调URL 授权成功后QQ会将用户重定向到你设置的redirectUri并在回调地址的查询参数中加上一个code参数和原先的state。 前端获取code并验证state 前端从回调地址中解析出code参数。同时验证返回的state是否与最初发送的state一致以确保这不是一个CSRF攻击。 state参数也可以交给后端进行验证 这里的回调地址就是QQ互联上面写的回调地址,前端会在这个回调地址的页面发送请求给后端,同时携带code和state参数(这两个参数从回调地址里面取出来的) 前端向后端发送登录请求并携带code和state参数 前端发起请求将code和state发送到后端的/callback接口。 后端获取Access Token 后端使用code向QQ服务器请求访问令牌Access Token。这通常涉及到一个POST请求到https://graph.qq.com/oauth2.0/token带有code、YOUR_APP_ID、YOUR_APP_KEY你的应用密钥和YOUR_REDIRECT_URI作为参数。 后端获取OpenID 使用Access Token后端可以向QQ服务器请求OpenID这是一个代表QQ用户唯一标识的值。 后端获取用户信息 后端使用Access Token和OpenID请求QQ服务器以获取用户的基本信息。 创建或登录用户 后端可以使用从QQ获取的用户信息来 检查数据库中是否已经有一个与此QQ账户关联的用户。如果是则登录该用户。如果不是则创建一个新用户并与该QQ账户关联。 返回结果到前端 后端可以返回一个令牌如JWT或其他标识已登录用户的信息到前端。 前端处理登录状态 前端根据后端的响应处理用户的登录状态例如保存JWT显示用户的信息等。 代码示例 1. 添加依赖 在pom.xml中添加相关的依赖 !-- Spring Boot Web Starter: 提供了创建web应用所需要的所有必要依赖包括内嵌的Tomcat服务器 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId /dependency!-- Apache HttpClient: 一个流行的库用于处理HTTP请求 -- dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactId /dependency!-- Jackson Databind: 用于将Java对象与JSON数据进行序列化和反序列化 -- dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactId /dependency 2. 配置文件 在application.properties添加 qq.appIdYOUR_APP_ID qq.appKeyYOUR_APP_KEY qq.redirectUrihttp://yourdomain.com/auth/qq/callback3. 实现Service 创建一个QQAuthService用于处理与QQ的交互。 Service public class QQAuthService {// 从application.properties中读取配置值Value(${qq.appId})private String appId;Value(${qq.appKey})private String appKey;Value(${qq.redirectUri})private String redirectUri;// 创建一个可关闭的HTTP客户端用于发送请求private final CloseableHttpClient httpClient HttpClients.createDefault();/*** 获取Access Token* * param code 从QQ回调URL中获得的授权码* return 返回Access Token* throws IOException 处理HTTP请求可能会出现的IO异常*/public String getAccessToken(String code) throws IOException {// 构建获取Access Token的URLString url https://graph.qq.com/oauth2.0/token?grant_typeauthorization_codeclient_id appId client_secret appKey code code redirect_uri redirectUri;// 创建一个HttpGet请求HttpGet httpGet new HttpGet(url);// 执行该请求并获取响应CloseableHttpResponse response httpClient.execute(httpGet);// 将响应内容转换为字符串String responseStr EntityUtils.toString(response.getEntity());// 解析响应内容提取access_tokenString accessToken responseStr.split()[0].split()[1];return accessToken;}/*** 获取OpenID* * param accessToken Access Token* return 返回OpenID* throws IOException 处理HTTP请求可能会出现的IO异常*/public String getOpenId(String accessToken) throws IOException {// 构建获取OpenID的URLString url https://graph.qq.com/oauth2.0/me?access_token accessToken;// 创建一个HttpGet请求HttpGet httpGet new HttpGet(url);// 执行该请求并获取响应CloseableHttpResponse response httpClient.execute(httpGet);// 将响应内容转换为字符串String responseStr EntityUtils.toString(response.getEntity());// 解析响应内容提取openidString openId responseStr.substring(responseStr.lastIndexOf(:\) 2, responseStr.lastIndexOf(\}));return openId;}/*** 获取用户信息* * param accessToken Access Token* param openId OpenID* return 返回用户信息的JSON字符串* throws IOException 处理HTTP请求可能会出现的IO异常*/public String getUserInfo(String accessToken, String openId) throws IOException {// 构建获取用户信息的URLString url https://graph.qq.com/user/get_user_info?access_token accessToken oauth_consumer_key appId openid openId;// 创建一个HttpGet请求HttpGet httpGet new HttpGet(url);// 执行该请求并获取响应CloseableHttpResponse response httpClient.execute(httpGet);// 将响应内容转换为字符串String responseStr EntityUtils.toString(response.getEntity());// 直接返回用户信息的JSON字符串return responseStr; } } 4. 创建Controller RestController RequestMapping(/auth/qq) public class QQAuthController {Autowiredprivate QQAuthService qqAuthService;/*** 重定向用户到QQ登录页面。* * param response HttpServletResponse对象用于发送重定向。* param session HttpSession对象用于存储state。* throws IOException 如果重定向失败。*/GetMapping(/login)public void qqLogin(HttpServletResponse response, HttpSession session) throws IOException {// 生成并存储一个唯一的state值String state UUID.randomUUID().toString();session.setAttribute(qq_oauth_state, state);// 构建QQ授权的URLString url https://graph.qq.com/oauth2.0/authorize?response_typecodeclient_id appId redirect_uri URLEncoder.encode(redirectUri, UTF-8) state state;// 当你在移动端上请求登录时,可以在请求中带上displaymobile参数// 系统就会跳转到移动版的QQ登录页面为用户提供更好的体验if (mobile.equals(display)) {url displaymobile;}// 重定向到QQ授权页面response.sendRedirect(url);}/*** 处理QQ授权的回调请求。* * param code QQ授权返回的code。* param state QQ授权返回的state。* param session HttpSession对象用于验证state。* return 用户信息或错误消息。*/GetMapping(/callback)public String qqCallback(RequestParam String code, RequestParam String state, HttpSession session) {// 检查返回的state是否与存储的一致String storedState (String) session.getAttribute(qq_oauth_state);if (storedState null || !storedState.equals(state)) {return Error: state does not match;}try {// 获取并使用AccessToken和OpenIDString accessToken qqAuthService.getAccessToken(code);String openId qqAuthService.getOpenId(accessToken);String userInfo qqAuthService.getUserInfo(accessToken, openId);// 这里可以进行用户注册或登录操作// 这里可以根据用户是新用户还是老用户决定是注册后登录还是直接登录// 然后返回登录用户的信息return userInfo;} catch (IOException e) {return Error occurred during QQ auth: e.getMessage();}} }
http://www.hkea.cn/news/14267828/

相关文章:

  • 网站建设项目书广告代理
  • 0592 网站建设seo线上培训班
  • 杭州企业网站建设公司怎么样深圳网站建设汤小巧
  • 廊坊网站建设解决方案吉林网络推广公司
  • 淘宝网站的建设目的是什么意思网站建设的一些问题
  • 梅林 建站 wordpress长沙专业竞价优化公司
  • 2 网站内部链接优化南京网站开发南京乐识专心
  • 上海奉贤网站建设wordpress 缩略图高度
  • 黄浦网站建设个人养老金制度是什么意思
  • 北京市网站建设公司营销策划公司名字简单大气
  • 佛山哪里有网站开发?域名注册以后会给你一个账户名密码上传做好的网站
  • php网站如何上传数据库admin管理员登录
  • 艾艺的品牌网站设计厦门建设局官网
  • 吴中区建设局招标网站合肥网站建设专业设计
  • 风格活泼的网站设计二级域名查询入口
  • 阿里云网站搭建什么企业需要网站建设
  • 怎么查找网站的根目录群晖安装wordpress
  • 开通域名后怎样建设网站网站备案负责人一定要法人
  • 网站建设与管理实践实践报告做网站流量的方法
  • 免费网站可以下载策划公司排名
  • 有什么网站做的比较高大上百度广告屏蔽
  • 九歌人工智能诗歌写作网站房地产网站建设联系方式
  • 做网站的人能看到浏览的人的信息吗wordpress收入
  • 怎么用ps做网站上的产品图sap.net网站开发
  • wordpress导航建设杭州网站建设方案优化
  • 百度推广怎么做网站的优化韩雪冬个人网站
  • php网站开发 多少钱上海到北京顺丰快递要多久
  • 网站页面和图片设计焊工培训ppt课件
  • 华为做网站网站关键词在哪
  • 给人做logo的网站小程序模板套用教程