Java模拟实现QQ三方登录(单点登录2.0)

本文实例为大家分享了Java模拟实现QQ三方登录的具体代码,供大家参考,具体内容如下

本次例子模拟这样的情况:

一共有2个spring boot应用:

一个是某公司的web,第二个是QQ服务端。

某公司的应用为127.0.0.1:8082

QQ服务端为127.0.0.1:8081

演示如下:

点击使用QQ登录:

在弹出的界面输入数据点击登录后:

关键代码如下:

某公司web端:

MyController.java

package cn.it1995.login.controller;

import cn.it1995.login.util.CookieUtil;
import cn.it1995.login.util.Result;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

@RestController
public class MyController {

 @Autowired
 private RestTemplate restTemplate;

 private static final String USER_KEY="user_key";

 private ConcurrentMap<String, Object> user = new ConcurrentHashMap<>();

 @GetMapping("/getUser")
 public Object getUser(HttpServletRequest request, HttpServletResponse response){

  String loginCookie = CookieUtil.getLoginCookie(request, response);
  Object o = user.get(loginCookie);
  return Result.success(o);
 }

 @PostMapping("/loginByQQ")
 public Object loginByQQ(String token, HttpServletResponse response, HttpServletRequest request){

  MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap();
  paramMap.add("token", token);
  ResponseEntity<Object> objectResponseEntity = restTemplate.postForEntity("http://127.0.0.7:8081/getLoginInfo", paramMap, Object.class);
  Object body = objectResponseEntity.getBody();
  String uuid = CookieUtil.setLoginCookie(request, response);

  //json标准化
  String newJson = body.toString().replace("=", ":");
  System.out.println(newJson);

  Map map = JSON.parseObject(newJson, Map.class);
  Map data = JSON.parseObject(map.get("data").toString(), Map.class);
  user.put(uuid, data);
  return Result.success();
 }
}

QQ服务端:

UserController.java

package cn.it1995.qqServer.controller;

import cn.it1995.qqServer.util.JwtUtil;
import cn.it1995.qqServer.util.Result;
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Controller
public class UserController {

 @ResponseBody
 @RequestMapping("/login")
 public Object login(@RequestParam("username") String username,
      @RequestParam("password") String password){

  Map<String, Object> map = new HashMap<>();
  map.put("username", username);
  map.put("password", password);
  String jwt = JwtUtil.createJWT(UUID.randomUUID().toString(), JSON.toJSONString(map), 3600 * 24);
  return jwt;
 }

 @ResponseBody
 @RequestMapping("/getLoginInfo")
 public Object getLoginInfo(String token){

  String subject = JwtUtil.parseJWT(token).getSubject();
  return Result.success().data(subject);
 }

}

项目打包下载地址:SSODemo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java代码块之简易qq登录界面及按钮颜色设置代码

    本文主要分享了关于简洁版qq登录界面及按钮颜色设置的相关代码,供参考. java代码块 公共包(初始化窗口位置) package util; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame; //图形化界面的工具类 public class FrameUtil { //设置窗体出现在中间位置 public static void initFrame(JFrame frame,int wid

  • Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEclipse的拖动功能). 源代码如下: package ibees.qq; import java.awt.BorderLayout; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JButton; impo

  • JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)

    JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)的实现思路如下所示: 一.该功能有什么作用 大家想想吧.反正总会有这样的需求的.这年头什么需求不会有..呵呵.有时候也不一定是需求,很有可能为了安全也会这么做.例如考试系统,在线聊天系统,很有必要做成这样的吧. 二.实现过程 a.问题分析 在系统中,我们一般都是把登录信息绑定到session中,看来从这入手是可能找到解决办法.说白了,也就是当用户登录时,判断一下这个用户有没有登录,如果登录了,就把以前的那个session清除

  • Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    对于一个帐号在同一时间只能一个人登录,可以通过下面的方法实现: 1 .在用户登录时,把用户添加到一个ArrayList中 2 .再次登录时查看ArrayList中有没有该用户,如果ArrayList中已经存在该用户,则阻止其登录 3 .当用户退出时,需要从该ArrayList中删除该用户,这又分为三种情况 ① 使用注销按钮正常退出 ② 点击浏览器关闭按钮或者用Alt+F4退出,可以用JavaScript捕捉该页面关闭事件, 执行一段Java方法删除ArrayList中的用户 ③ 非正常退出,比如

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

    前期准备工作 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 登录后,点击头像,进入认证页面,填写信息,等待审核. 审核通过后创建应用 应用创建通过审核后,就可以使

  • java实现简单QQ登录界面

    本文实例为大家分享了java实现简单QQ登录界面的具体代码,供大家参考,具体内容如下 java在图形界面,不是太强项,但不是不可以做,它的开源是very nice! 实现代码如下(想实现完美的界面,可能要更多coding的支持): package com.ts.x.swing; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Font; import java.aw

  • 使用java swing实现qq登录界面示例分享

    用Java Swing做的一个QQ登录界面 复制代码 代码如下: import java.awt.Container;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBox;import javax

  • java实现 微博登录、微信登录、qq登录实现代码

    微信,微博,QQ,这是现在目前用的最多的手机 APP,我们做产品哪能不跟他们不沾边,对于登录,我想谁也不想要多少个帐号密码,根本记不住! 为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注册的的需求也就由此而诞生 1.微信 1) 微信登录也是最坑人的,需要花300大洋成为开发者账户,没办法谁让微信用户群体大呢所以也就只好认了:然后登录网站后台需要创建网站应用,填写授权回调域(登录网站的域名)只填写域名即可 申请地址: https://open.weixin.qq.com/cgi-bi

  • java模仿实现QQ登录界面

    本文实例为大家分享了java模仿实现qq登录界面的具体代码,供大家参考,具体内容如下 这是我模仿QQ2015版界面,实现的基本功能有登陆验证,重置等,当然直接复制代码运行是不一样的,还要注意自己插入自己的图片. 结果截图如下所示: 代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.Image

  • Java模拟实现QQ三方登录(单点登录2.0)

    本文实例为大家分享了Java模拟实现QQ三方登录的具体代码,供大家参考,具体内容如下 本次例子模拟这样的情况: 一共有2个spring boot应用: 一个是某公司的web,第二个是QQ服务端. 某公司的应用为127.0.0.1:8082 QQ服务端为127.0.0.1:8081 演示如下: 点击使用QQ登录: 在弹出的界面输入数据点击登录后: 关键代码如下: 某公司web端: MyController.java package cn.it1995.login.controller; impor

  • NodeJS实现单点登录原理解析

    目录 什么是单点登录 单点登录原理 NodeJS 演示 三个不同的服务 首次访问跳转至登录页 应用A判断登录态,跳转到SSO认证服务器 认证服务器判断登录态,渲染登录页 校验用户信息,创建令牌 从认证服务器携带令牌跳转回应用A 令牌校验 返回资源 访问应用B 带cookie跳转至SSO认证服务器 从认证服务器携带令牌跳转回应用B 令牌校验 返回资源 什么是单点登录 随着公司业务的增多,必然会产生各个不同的系统,如果每个系统都需要单独登录的话就会很不方便.因此产生了单点登录这样的解决方案,单点登录

  • SpringSecurity OAtu2+JWT实现微服务版本的单点登录的示例

    目录 何为单点登录 认证中心 maven配置 用户登录逻辑 OAtuh2配置 配置服务中心 配置规则中心 请求模块 真实请求 一些小问题 何为单点登录 单点登录通俗的话来讲在微服务当中,在一个服务登录后就能免去另一个服务的登录操作,所谓单点登录. 就好像你在微博总网站里登录后,然后在微博里面的某一个模块点进去后,就发现这个模块竟然不用登录了,不是因为这个模块与主网站是一体的用一个SpringSecurity就可以搞定了,这里面的水深着呢!感兴趣更深这个SpringSecurity建议去看看图灵课

  • Java模拟QQ桌面截图功能实现方法

    本文实例讲述了Java模拟QQ桌面截图功能实现方法.分享给大家供大家参考.具体如下: QQ的桌面截图功能非常方便,去年曾用Java模拟过一个,现整理出来. 本方法首先需要抓到屏幕的整个图象,将图象显示在一个JFrame中,再将JFrame全屏显示,这样就模拟出了一个桌面,Java也就可以获得鼠标的作用区域从而实现桌面中的小范围截屏. import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import

  • php实现的SSO单点登录系统接入功能示例分析

    本文实例讲述了php实现的SSO单点登录系统接入功能.分享给大家供大家参考,具体如下: SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一,下面我们来看看吧. 简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了. SSO 登录请求接

  • SpringSecurity OAuth2单点登录和登出的实现

    目录 1. 单点登录 1.1 使用内存保存客户端和用户信息 1.2 使用数据库保存客户端和用户信息 1.3 单点登录流程 1.3 JWT Token 2. 单点登出 3. 总结 参考: Spring Security OAuth 最新官方已经不再维护,以下内容只用于学习记录. GitHub:shpunishment/spring-security-oauth2-demo 1. 单点登录 单点登录即有多个子系统,有一个认证中心.当访问其中任意一个子系统时,如果发现未登录,就跳到认证中心进行登录,登

  • 一个注解搞定Spring Security基于Oauth2的SSO单点登录功能

    目录 一.说明 二.原理说明 2.1. 同域单点登录 2.2. 跨域单点登录 2.3. 基于Oauth2的跨域单点登录流程 三.Spring Security实现 四.demo下载地址 一.说明 单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼.本文主要介绍 同域 和 跨域 两种不同场景单点登录的实现原理,并使用 Spring Security 来实现一个最简单的跨域 SSO客户端 . 二.原理说明 单点登录主流都是基于共享 cookie

  • Java spring单点登录系统

    目录 1.单点登录系统介绍 2.简单业务实现 2.1添加依赖 2.2 项目配置文件 2.3添加项目启动类 2.4 启动并访问项目 3. 优化进一步设计 3.1 定义安全配置类 SecurityConfig 3.2定义用户信息处理对象 3.3 网关中登陆路由配置 3.4基于Postman进行访问测试 3.5 定义登陆页面 3.6 构建令牌配置对象 3.7 定义认证授权核心配置 授权服务器的核心配置 Postman访问测试 4 资源服务器配置–sca-resource 4.1 构建令牌配置对象 4.

  • Java模拟新浪和腾讯自动登录并发送微博

    Java模拟新浪和腾讯自动登录并发送微博功能分享给大家,供大家参考,具体内容如下 1.准备工作 只是登录无需申请新浪和腾迅的开发者账号,如果需要发送微博功能,需要申请一个新浪和腾迅的开发者账号,并添加一个测试应用. 过程请参考官方帮助文档,申请地址:新浪:http://open.weibo.com    腾迅:http://dev.t.qq.com/ 我们需要的是App Key和App Secre及redirect_URI,源代码中已经包含了我申请的测试key,但由于限制直接用我的key你们的账

  • Java模拟登录正方教务抓取成绩、课表、空教室

    本文实例为大家分享了Java模拟登录正方教务抓取成绩.课表.空教室等信息,供大家参考,具体内容如下 1.Jwgl.java package com.ican.yueban.jwgl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.apache.http.Ht

随机推荐