单点登录

单点登录,本地登录,架构图如下:

 

 

 

 

代码例子:

package com.teligen.demo.controller;

import com.teligen.demo.configuration.JedisCache;
import com.teligen.demo.dto.LoginDTO;
import com.teligen.demo.dto.ResultDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.hibernate.validator.constraints.Length;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.Min;
import java.util.UUID;

@RestController
@RequestMapping("/login")
@Api(description = "登录")
/**
 * 单点登录例子
 */
public class LoginController {
    @Autowired
    private JedisCache jedisCache;

    @GetMapping("/login")
    @ApiOperation("登录")
    public String getCount1(String userName, String password, HttpServletResponse response) {
        LoginDTO loginDTO = new LoginDTO(userName, password);
        String token = UUID.randomUUID().toString();
        //写入redis,redis可以是集群
        jedisCache.set(token, loginDTO.toString());
        //写入cookie,也返回token,因为客户端除了浏览器,也可能有app等其他端
        Cookie cookie=new Cookie("TOKEN", token);
        cookie.setDomain("drafire.com");
        response.addCookie(cookie);
        return token;
    }
}

 

package com.teligen.demo.controller;

import com.teligen.demo.configuration.JedisCache;
import com.teligen.demo.dto.LoginDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;

@RestController
@RequestMapping("/login")
@Api(description = "登录")
/**
 * 单点登录例子
 */
public class LoginController {
    @Autowired
    private JedisCache jedisCache;

    @GetMapping("/getuser")
    @ApiOperation("获取用户信息")
    public String getCount1(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        for (Cookie item : cookies) {
            if(item.getName().equalsIgnoreCase("TOKEN")){
                String token = item.getValue();
                Object o = jedisCache.get(token);
                return o.toString();
            }
        }
        return null;
    }
}

 

TD的单点登录只适合于同顶级域名,可以参考。

简单来说,只需要将cookie的域名设置为顶级域名,比如 tuandai.com,那么这个域名下的所有二级域名,比如login.tuandai.com, vip.tuandai.com,都可以读取到

登录后的cookie

同理,删除的时候,只需要将 tuandai.com下的cookie设置为null,则 tuandai.com 和 login.tuandai.com等二级子域名的cookie都会被删除

修改也是同理

https://blog.csdn.net/qq_39781497/article/details/79617844

 

第三方登录7步骤

1、客户端发送请求登录给系统a
2、系统重定向到第三方,携带callback地址(系统a地址)
3、输入账号密码,携带serviceId status(code),这个code通常时间很短,一般只有15分钟
4、第三方校验通过,返回code
5、callback地址(系统a)携带code 请求第三方,这个code只能由合格callback地址调用
6、第三方通过请求,返回令牌
7、系统a或其他的系统bcd,用令牌换取登录信息。系统a携带令牌请求第三方换取登录信息的时候,因为是服务器与服务器之间的调用,因此不会存在被爬虫的情况

 

posted on 2021-02-28 14:39  drafire  阅读(105)  评论(0编辑  收藏  举报