• 单点登录


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

    代码例子:

    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携带令牌请求第三方换取登录信息的时候,因为是服务器与服务器之间的调用,因此不会存在被爬虫的情况

  • 相关阅读:
    python 垃圾回收装置
    文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance/GoodSync/Allway Sync/Compare Advance)
    WCF的ABC
    NPOI导出多表头Execl(通过html表格遍历表头)
    分布式应用处理方式
    再探ASP.NET 5(转载)
    应聘.net开发工程师常见的面试题(五)
    应聘.net开发工程师常见的面试题(四)
    应聘.net开发工程师常见的面试题(二)(转载)
    应聘.net开发工程师常见的面试题(一)(转载)
  • 原文地址:https://www.cnblogs.com/drafire/p/14458805.html
Copyright © 2020-2023  润新知