单点登录
单点登录,本地登录,架构图如下:
代码例子:
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携带令牌请求第三方换取登录信息的时候,因为是服务器与服务器之间的调用,因此不会存在被爬虫的情况