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

网友投稿 277 2022-12-03


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 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 paramMap = new LinkedMultiValueMap();

paramMap.add("token", token);

ResponseEntity 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);

TZruOTYJuser.put(uuid, data);

return Result.success();

}

}

QQ服务端:

UserController.java

package cn.it1995.qqServer.controller;

ihttp://mport 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 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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于java读取并引用自定义配置文件
下一篇:Spring IOC和DI实现原理及实例解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~