四川秒加智慧科技有限公司
1. 单点登录怎么做?
一、 登录流程
1. 访问demo1 --- http://localhost:9001/
2. 没有登录 --- 重定向到单点登录服务器
http://localhost:9100/cas/login?service=http://localhost:9001/(get)
-- 跳转到cas登录页面
3. 在登录页面输入用户名密码
http://localhost:9100/cas/login?service=http://localhost:9001/ (post)
4. 登录成功 --- 重定向到demo1,并且带上随机ticket(创建一个全局会话CASTGC)
http://localhost:9001/?ticket=ST-1-S2maNJ6XTS7c9fYa6O0X-cas01.example.org
CASTGC: 有效域名 : localhost
有效路径:/cas
5. 在demo1的服务端就会拿到ticket,并且使用该ticket去访问http://localhost:9100/cas
验证ticket,并且获得用户信息
6. 在浏览器和demo1服务器之间创建一个私有会话,之后都通过私有的会话去获取demo1
服务端的ticket,然后去http://localhost:9100/cas校验
二、认证流程
1、访问demo2 --- http://localhost:9002/
2. 因为没有demo2认证过,重定向到
http://localhost:9100/cas/login?service=http://localhost:9002/
并且带上全局会话:CASTGC
3. 在cas服务器中,得到全局会话CASTGC,去获取cas服务器中的随机ticket,然后再把该ticket
重定向回demo2
http://localhost:9002/?ticket=ST-2-OtWHKVJ9cgKua4XJcdJN-cas01.example.org
4. demo2服务器拿到该ticket,然后去访问http://localhost:9100/cas去检验ticket,获取用户
5. 在浏览器和demo2服务器之间创建一个私有会话,之后都通过私有的会话去获取demo2
服务端的ticket,然后去http://localhost:9100/cas校验
2. 还有那些实现单点登录的方式?
通过页面重定向的方式
最后一种介绍的方式,是通过父应用和子应用来回重定向中进行通信,实现信息的安全传递。
父应用提供一个GET方式的登录接口,用户通过子应用重定向连接的方式访问这个接口,如果用户还没有登录,则返回一个的登录页面,
用户输入账号密码进行登录。如果用户已经登录了,则生成加密的Token,并且重定向到子应用提供的验证Token的接口,通过解密和校验之后,子应用登录当前用户。
通过JSONP实现
对于跨域问题,可以使用JSONP实现。
用户在父应用中登录后,跟Session匹配的Cookie会存到客户端中,当用户需要登录子应用的时候,授权应用访问父应用提供的JSONP接口,
并在请求中带上父应用域名下的Cookie,父应用接收到请求,验证用户的登录状态,返回加密的信息,子应用通过解析返回来的加密信息来验证用户,如果通过验证则登录用户。
以Cookie作为凭证媒介
最简单的单点登录实现方式,是使用cookie作为媒介,存放用户凭证。
用户登录父应用之后,应用返回一个加密的cookie,当用户访问子应用的时候,携带上这个cookie,授权应用解密cookie并进行校验,校验通过则登录当前用户。
3. 问了一些sql语句的问题(比如给你一些表,怎么去用sql查询)
sql面试题总结
4. 了解springboot+springcloud吗?
SpringCloud是Spring为微服务架构思想做的一个一站式实现。从某种程度是可以简单的理解为,微服务是一个概念、一个项目开发的架构思想。SpringCloud是微服务架构的一种java实现。
SpringCloud是基于SpringBoot的一套实现微服务的框架。它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、
全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,跟SpringBoot框架一起使用的话,会让你开发微服务架构的云服务非常方便。
5. 聊一聊秒杀怎么实现的?
秒杀与其他业务最大的区别在于:秒杀的瞬间,(1)系统的并发量会非常的大(2)并发量大的同时,网络的流量也会瞬间变大。
关于(2),最常用的办法就是做页面静态化,也就是常说的前后端分离,把静态页面直接缓存到用户的浏览器端,所需要的数据从服务端接口动态获取。
这样会大大节省网络的流量,再加上CDN,一般不会有大问题。
当然,如果我们的商品数比较多,1万件商品参与秒杀,1万*10=10万个并发去请求DB,DB的压力还是会很大,这里就用到另一个非常重要的组件:消息队列。
我们不是把请求直接去访问DB,而是先把请求写到消息队列,做一个缓存,然后再去慢慢的更新数据库。这样做以后,前端用户的请求可能不会立即得到响应是成功还是失败,
很可能得到的是一个排队中的返回值,这个时候,需要客户端再去服务端轮询,因为我们不能保证一定就秒杀成功了。
当服务端出队,生成订单以后,把用户ID和商品ID写到缓存中,来应对客户端的轮询就可以了。
6. 你的技术栈?
你的专业技能那一栏,照自己熟悉的说
|
|