谷粒商城-认证服务

目录

商城业务-认证服务-环境搭建

商城业务-认证服务-好玩的验证码倒计时

商城业务-认证服务-整合短信验证码

商城业务-认证服务-验证码防刷校验

商城业务-认证服务-一步一坑的注册页环境

商城业务-认证服务-异常机制

商城业务-认证服务-MD5&盐值&BCrypt

商城业务-认证服务-注册完成

商城业务-认证服务-账号密码登录完成

商城业务-认证服务-OAuth2.0简介

商城业务-认证服务-weibo登录测试

商城业务-认证服务-社交登录回调

商城业务-认证服务-社交登录完成

商城业务-认证服务-社交登录测试成功

商城业务-认证服务-分布式session不共享不同步问题

商城业务-认证服务-分布式session解决方案原理

商城业务-认证服务-SpringSession整合

商城业务-认证服务-自定义SpringSession完成子域session共享

商城业务-认证服务-SpringSession原理

商城业务-认证服务-页面效果完成

商城业务-认证服务-单点登录简介

商城业务-认证服务-补-框架效果演示

商城业务-认证服务-单点登录流程-1

商城业务-认证服务-单点登录流程-2

商城业务-认证服务-单点登录流程-3


商城业务-认证服务-环境搭建

1.创建认证服务

①使用spring初始化向导创建服务

谷粒商城-认证服务_第1张图片

②选择SpringBoot的版本,添加服务需要的依赖

谷粒商城-认证服务_第2张图片 需要注册中心和配置中心的依赖,因此,导入common,还需排除mybatis的依赖,因为不用数据库

谷粒商城-认证服务_第3张图片

2. 开启服务注册功能

①配置配置文件

谷粒商城-认证服务_第4张图片

②开启服务注册功能

谷粒商城-认证服务_第5张图片

Nginx动静分类 

①配置域名

②templates中导入登录、注册的html

谷粒商城-认证服务_第6张图片

谷粒商城-认证服务_第7张图片

将注册页面的index.html改名为reg.html,登录页面的html暂时不改名方便后面测试能否获取到Ngixn的静态资源,因为SpringMVC默认访问templates下的index.html,否则需要Controller路由

 谷粒商城-认证服务_第8张图片

③上传静态资源至Nginx

谷粒商城-认证服务_第9张图片

谷粒商城-认证服务_第10张图片 谷粒商城-认证服务_第11张图片

④修改访问路径(CTRL+R)

 ⑤配置网关

谷粒商城-认证服务_第12张图片

商城业务-认证服务-好玩的验证码倒计时

1.编写路径跳转的Controller

谷粒商城-认证服务_第13张图片

如果编写一个接口仅仅是为了跳转页面,没有数据的处理,如果这样的跳转接口多了则可以使用SpringMVC的view Controller(视图控制器)将请求与页面进行绑定

谷粒商城-认证服务_第14张图片

2.为了页面修改能实时看到效果,关闭thymeleaf的缓存

谷粒商城-认证服务_第15张图片

3. 修改首页、注册页、登录页的正确跳转

①点击谷粒商城正确跳转首页

谷粒商城-认证服务_第16张图片

②点击立即注册跳转注册页面

谷粒商城-认证服务_第17张图片

③点击登录跳转登录页面、点击注册跳转注册页面

谷粒商城-认证服务_第18张图片

④点击请登录跳转登录页面

谷粒商城-认证服务_第19张图片

⑤点击谷粒商城跳转首页页面

谷粒商城-认证服务_第20张图片

谷粒商城-认证服务_第21张图片

4.倒计时60s的编写

谷粒商城-认证服务_第22张图片

谷粒商城-认证服务_第23张图片①为sendCode绑定点击事件

谷粒商城-认证服务_第24张图片

出现问题:可以多次点击,多个事件会叠加在一起 

解决方案: 当被点击之后为class值添加disabled,判断class的值是否可点击

谷粒商城-认证服务_第25张图片

商城业务-认证服务-整合短信验证码

1.进入阿里云官网,点击云市场中的三网短信接口

地址:API市场-云市场-阿里云

谷粒商城-认证服务_第26张图片

2.购买0元体验

点击官方106三网短信

谷粒商城-认证服务_第27张图片

谷粒商城-认证服务_第28张图片

3. 在管理控制台中查看已购买的短信验证API

有各个参数的详细解释以及java的示例代码

 点击短信接口超链接,有详细的API接口文档

谷粒商城-认证服务_第29张图片

Host的获取即调用地址去除/sms/smsSend和(s)

谷粒商城-认证服务_第30张图片

AppCode的获取

AppCode的拼接方式

谷粒商城-认证服务_第31张图片

谷粒商城-认证服务_第32张图片

smsSignId公司的签名,这个需要自己跟客服去申请,就下图圈起来的东西

可以点击去调试按钮进行一个简单的使用体验

谷粒商城-认证服务_第33张图片

谷粒商城-认证服务_第34张图片4.简单测试

输入你的appCode,HttpUtils按照注释自行下载

谷粒商城-认证服务_第35张图片

将复制的HttpUtils放在第三方服务的util包下,文件上传、短信验证、物流查询都属于第三方服务

谷粒商城-认证服务_第36张图片

5. 编写可配置的发送短信的接口

谷粒商城-认证服务_第37张图片

谷粒商城-认证服务_第38张图片

谷粒商城-认证服务_第39张图片

商城业务-认证服务-验证码防刷校验

1.编写短信验证controller,方便其它服务调用

谷粒商城-认证服务_第40张图片

2. 认证服务远程调用发送短信验证码功能

①依赖已导入,开启远程服务调用功能

谷粒商城-认证服务_第41张图片

② 远程调用接口编写

3.认证服务中编写获取短信验证码的controller

谷粒商城-认证服务_第42张图片

4. 注册页面编写请求发送验证码功能

①为手机号码input框设置id,方便获取

谷粒商城-认证服务_第43张图片

②发送请求,请求后台发送短信验证码

谷粒商城-认证服务_第44张图片

问题1:有人拿到请求路径恶意请求

解决方案:后续会说明

5.防止一个手机号码60s内多次获取短信验证码

解决思路:将短信验证码存储在redis中,key为phoneNum,value为验证码和存储时系统的当前时间。从redis中查询为null则调用发送短信验证码,若查询不为空则判断是否超过60s,是则再次调用发送短信验证码,否则返回提示信息。

①导入redis的依赖,并配置好redis

谷粒商城-认证服务_第45张图片

②common的constant中编写验证码前置

谷粒商城-认证服务_第46张图片

③编写错误代码

谷粒商城-认证服务_第47张图片

④接口编写

谷粒商城-认证服务_第48张图片


@RestController
public class LoginController {

    @Autowired
    private SmsSCFeignService smsSCFeignService;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @GetMapping("/sms/sendcode")
    public R sendCode(@RequestParam("phone") String phone){
        // TODO 接口防刷
        // 处理一个手机号码60s内多次获取短信验证码问题
        String s = stringRedisTemplate.opsForValue().get(SmsConstant.SMS_CODE_CACHE_PREFIX + phone);
        if (StringUtils.isNotEmpty(s)){
            // 获取存储时的系统时间
            Long saveTime = Long.parseLong(s.split("_")[1]);
            // 单位为毫秒,因此,60秒要转化为毫秒即60000
            if (saveTime - System.currentTimeMillis()< 60000){
                return R.error(BizCodeEnum.SMS_CODE_EXPTION.getCode(), BizCodeEnum.SMS_CODE_EXPTION.getMsg());
            }
        }
        String code = UUID.randomUUID().toString().substring(0,5);
        stringRedisTemplate.opsForValue().set(SmsConstant.SMS_CODE_CACHE_PREFIX+phone,code+"_"+System.currentTimeMillis(),10, TimeUnit.MINUTES);
        smsSCFeignService.sendCode(phone,code);
        return R.ok();
    }

}

⑤ 注册页面的请求发送验证码的回调函数编写

谷粒商城-认证服务_第49张图片

商城业务-认证服务-一步一坑的注册页环境

1.编写注册接口

谷粒商城-认证服务_第50张图片

2.编写Vo封装注册数据

谷粒商城-认证服务_第51张图片

3. 使用JSR303进行数据校验

导入依赖



   org.springframework.boot
   spring-boot-starter-validation

 说明:不导入此依赖,@Valid注解不生效

谷粒商城-认证服务_第52张图片

使用@Valid注解开启数据校验功能,将校验后的结果封装到BindingResult中 

谷粒商城-认证服务_第53张图片

4.编写注册页面

 为每个input框设置name属性,值需要与Vo的属性名一一对应

谷粒商城-认证服务_第54张图片

点击注册按钮没有发送请求,说明:为注册按钮绑定了单击事件,禁止了默认行为。将绑定的单击事件注释掉 

 5.为Model绑定校验错误信息

方法一:

谷粒商城-认证服务_第55张图片

方法二: 

谷粒商城-认证服务_第56张图片

编写前端页面获取错误信息 

①导入thymeleaf的名称空间

② 封装错误信息

谷粒商城-认证服务_第57张图片

谷粒商城-认证服务_第58张图片

出现问题: 转发失败,打印字符串

出现问题的原因:controller层使用了@RestController注解会自动返回json数据

解决方案:使用@controller注解

谷粒商城-认证服务_第59张图片

出现问题: Request method 'POST' not supported

出现问题的原因:表单的提交使用的是post请求,会原封不动的转发给reg.html,但是/reg.html(路径映射默认都是get方式访问)

解决方案:如下图所示

谷粒商城-认证服务_第60张图片

出现问题:刷新页面,会重复提交表单

谷粒商城-认证服务_第61张图片

出现问题的原因:转发,原封不对转发过去

解决方案:使用重定向

谷粒商城-认证服务_第62张图片

出现问题:转发,数据都封装在Model中,而重定向获取不到 

解决方案:使用 RedirectAttributes

RedirectAttributes的方法讲解:Spring MVC ---- RedirectAttributes 使用,请求转发携带参数总结_zhangjian15的博客-CSDN博客

谷粒商城-认证服务_第63张图片

出现问题:重定向到服务端口地址 

谷粒商城-认证服务_第64张图片

解决方案: 写完整的域名路径

谷粒商城-认证服务_第65张图片

说明: RedirectAttributes的addFlashAttribute()方法是将errors保存在session中,刷新一次就没了

谷粒商城-认证服务_第66张图片

出现问题:分布式下重定向使用session存储数据会出现一些问题

解决方案:后续会说明

商城业务-认证服务-异常机制

1.校验验证码

谷粒商城-认证服务_第67张图片

2. 会员服务中编写Vo接受数据

谷粒商城-认证服务_第68张图片

3. 编写会员服务的用户注册接口

谷粒商城-认证服务_第69张图片

① 查询会员你得默认等级

谷粒商城-认证服务_第70张图片

② 检查用户名和手机号是否唯一

这里采用异常机制处理,如果查出用户名或密码不唯一则向上抛出异常

异常类的编写

谷粒商城-认证服务_第71张图片

谷粒商城-认证服务_第72张图片检查用户名和手机号是否存在的方法编写

谷粒商城-认证服务_第73张图片 谷粒商城-认证服务_第74张图片

谷粒商城-认证服务_第75张图片 谷粒商城-认证服务_第76张图片

谷粒商城-认证服务_第77张图片 如果抛出异常,则进行捕获

谷粒商城-认证服务_第78张图片

密码的设置,前端传来的密码是明文,存储到数据库中需要进行加密,后面会说到 

商城业务-认证服务-MD5&盐值&BCrypt

首先,加密分为可逆加密和不可逆加密。密码的加密为不可逆加密

什么是MD5?

谷粒商城-认证服务_第79张图片

 Apache.common下DigestUtils工具类的md5Hex()方法,将MD5加密后的数据转化为16进制

谷粒商城-认证服务_第80张图片

MD5并安全,很多在线网站都可以破解MD5,通过使用彩虹表,暴力破解。

谷粒商城-认证服务_第81张图片

因此,需要通过使用MD5+盐值进行加密 

盐值:随机生成的数

什么是加盐?

谷粒商城-认证服务_第82张图片

方法1是加默认盐值:$1$xxxxxxxx

方法2是加自定义盐值

谷粒商城-认证服务_第83张图片

缺点:还需额外在数据库中存储盐值

因此,可以使用Spring家的BCryptPasswordEncoder,它的encode()方法使用的就是MD5+盐值进行加密,盐值是随机产生的

谷粒商城-认证服务_第84张图片

通过matches()方法进行密码是否一致

用户注册业务中的密码加密

谷粒商城-认证服务_第85张图片

商城业务-认证服务-注册完成

1.在common的exception包下,编写异常枚举

谷粒商城-认证服务_第86张图片

2. 进行异常的捕获

谷粒商城-认证服务_第87张图片

3. 远程服务接口编写

谷粒商城-认证服务_第88张图片

4. 远程服务调用

谷粒商城-认证服务_第89张图片

5.注册页错误消息提示

谷粒商城-认证服务_第90张图片

商城业务-认证服务-账号密码登录完成

1.编写Vo

谷粒商城-认证服务_第91张图片

2.数据绑定

将ul包在表单里面

谷粒商城-认证服务_第92张图片

3. 编写登录接口

说明:不能加@RequestBody注解,这里是页面直接提交数据,数据类型是map并非json

谷粒商城-认证服务_第93张图片

4.member服务的Vo编写

谷粒商城-认证服务_第94张图片

5. member服务用户校验接口编写

谷粒商城-认证服务_第95张图片

谷粒商城-认证服务_第96张图片 编写异常枚举

谷粒商城-认证服务_第97张图片

谷粒商城-认证服务_第98张图片

6.远程服务接口编写

谷粒商城-认证服务_第99张图片

谷粒商城-认证服务_第100张图片7.错误信息提示 

谷粒商城-认证服务_第101张图片

商城业务-认证服务-OAuth2.0简介

谷粒商城-认证服务_第102张图片

 社交登录使用的是Auth2.0,Auth2.0的流程如下图所示:

谷粒商城-认证服务_第103张图片

商城业务-认证服务-weibo登录测试

1.搜索微博开放平台

地址:新浪微博开放平台-首页

找到微链接,点击网站接入

谷粒商城-认证服务_第104张图片

点击立即接入

谷粒商城-认证服务_第105张图片

填写应用名称

谷粒商城-认证服务_第106张图片

点击我的应用

 App Key 和 App Secret 是获取 Access token必填的参数

填写授权回调地址和授权失败回调地址

谷粒商城-认证服务_第107张图片谷粒商城-认证服务_第108张图片

微博Auth2.0文档地址: 授权机制说明 - 微博API

谷粒商城-认证服务_第109张图片

2.将QQ样式修改为微博样式

谷粒商城-认证服务_第110张图片

3.请求用户授权 

https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code

谷粒商城-认证服务_第111张图片

授权成功会跳转成功页面并携带一个code码,可以根据这个code码获取Access token 

通过code获取Access token

谷粒商城-认证服务_第112张图片

 说明:

①code只能使用一次,Access token只能一段时间有效

②uuid唯一,和关联账户绑定

拿到Access token 可以获取微博开放用户的信息 ,例如用户的性别、年龄等

通过微博提供的用户信息查询接口查询用户信息

谷粒商城-认证服务_第113张图片

商城业务-认证服务-社交登录回调

授权认证的时序图

 1.修改授权成功回调页

谷粒商城-认证服务_第114张图片

 修改超链接中的回调地址

2. 将third-part服务下的utils包下的HttpUtils工具类复制到common中

谷粒商城-认证服务_第115张图片

3.编写controller专门处理社交登录请求 

谷粒商城-认证服务_第116张图片

出现问题:微博登录接入出现错误码21322(重定向地址不匹配)谷粒商城-认证服务_第117张图片

 解决方案:微博登录接入出现错误码21322(重定向地址不匹配),其他解决方法_wwang_dev的博客-CSDN博客_21322 微博

谷粒商城-认证服务_第118张图片

清除缓存,重新测试即可

商城业务-认证服务-社交登录完成

 1. 编写获取Access token的实体类

谷粒商城-认证服务_第119张图片

 将获取到的json数据,利用json在线工具平台转化为java对象

谷粒商城-认证服务_第120张图片

 谷粒商城-认证服务_第121张图片

getEntity()获取到json数据,将json数据转为字符串,将字符串转为java对象 

谷粒商城-认证服务_第122张图片

2. 为member表新增三个字段

谷粒商城-认证服务_第123张图片

增加新的属性

谷粒商城-认证服务_第124张图片

 

3.会员服务创建接口处理第一次社交登录

将认证服务的SocialUserVo拷贝到member服务的vo包下

谷粒商城-认证服务_第125张图片

谷粒商城-认证服务_第126张图片谷粒商城-认证服务_第127张图片

商城业务-认证服务-社交登录测试成功

1.远程服务接口编写

谷粒商城-认证服务_第128张图片

2. 拷贝memberEntity的属性

谷粒商城-认证服务_第129张图片

3.远程服务调用

谷粒商城-认证服务_第130张图片

商城业务-认证服务-分布式session不共享不同步问题

登录成功后,NickName的显示

在之前的单体应用中,会将登录成功后的属性保存到session中 

谷粒商城-认证服务_第131张图片

Thymeleaf取出session 

谷粒商城-认证服务_第132张图片

出现问题:NickName未显示 

出现问题的原因:Session不能跨域使用

auth.gulimall域下的session作用域只限于auth.gulimall域,gulimall域是获取不到的,不共享的

谷粒商城-认证服务_第133张图片

谷粒商城-认证服务_第134张图片

session原理: 

谷粒商城-认证服务_第135张图片

分布式下session会出现问题如下:

①同一个服务,复制多份,session不同步问题

②不同服务,session不能共享问题

谷粒商城-认证服务_第136张图片

商城业务-认证服务-分布式session解决方案原理

方案一:sessio复制,不采用

谷粒商城-认证服务_第137张图片

方案二:客户端存储,不采用

谷粒商城-认证服务_第138张图片

方案三: 利用hash一致性,进行负载均衡,可以采用但是这里不采用

谷粒商城-认证服务_第139张图片

方案四: 统一存储,这里采用这套方案

谷粒商城-认证服务_第140张图片

SpringSession已经为我们做好了 

谷粒商城-认证服务_第141张图片

放大域名 ,SpringSession也为我们做好了

谷粒商城-认证服务_第142张图片

谷粒商城-认证服务_第143张图片 谷粒商城-认证服务_第144张图片

商城业务-认证服务-SpringSession整合

谷粒商城-认证服务_第145张图片

 谷粒商城-认证服务_第146张图片

谷粒商城-认证服务_第147张图片

传送门: Spring Session - Spring Boot

SpringSession整合redis的使用步骤:

①整合依赖

	
		org.springframework.session
		spring-session-data-redis
	

谷粒商城-认证服务_第148张图片

② boot配置

spring.session.store-type=redis # Session store type

server.servlet.session.timeout= # Session timeout. If a duration suffix is not specified,seconds is used
spring.session.redis.flush-mode=on_save # Sessions flush mode
spring.session.redis.namespace=spring:session # Namespace for keys used to store sessions

谷粒商城-认证服务_第149张图片

③redis连接配置

spring.redis.host=localhost # Redis server host
spring.redis.password= # Login password of the redis server
spring.redis.port=6379 # Redis server port

谷粒商城-认证服务_第150张图片

④Java配置

使用@EnableRedisHttpSession注解开启Spring Session with Redis功能

@EnableRedisHttpSession 
public class Config {

	@Bean
	public LettuceConnectionFactory connectionFactory() {
		return new LettuceConnectionFactory(); 
	}

}

谷粒商城-认证服务_第151张图片

1.Auth服务按照上列步骤完成Spring Session with Redis的整合

①整合依赖

谷粒商城-认证服务_第152张图片

② boot配置

谷粒商城-认证服务_第153张图片

③redis连接配置之前已经配置过了,略去

④Java配置

测试:看是否将session存入redis中

出现问题:DefaultSerializer requires a Serializable payload but received an object of type [com.atguigu.gulimall.auth.vo.MemberRespVo]

出现的原因: MemberRespVo未实现序列化解接口

解决方案:

谷粒商城-认证服务_第154张图片

保存成功,redis中有数据

 谷粒商城-认证服务_第155张图片

2.Product服务按照上列步骤完成Spring Session with Redis的整合 

①导入依赖

谷粒商城-认证服务_第156张图片

②boot配置

谷粒商城-认证服务_第157张图片

③之前已配置过redis连接配置

④Java配置

3. 将MemberRespVo复制到commom中,因为,product服务还需要将Session中存储的loginUser反序列化为MemberRespVo对象

谷粒商城-认证服务_第158张图片

将redis中的session删除,因为,session中存储的loginUser类型为 auth服务vo包下的,需要存储common服务vo包下的类型

谷粒商城-认证服务_第159张图片

4. 手动修改session的作用域

谷粒商城-认证服务_第160张图片

 谷粒商城-认证服务_第161张图片

商城业务-认证服务-自定义SpringSession完成子域session共享

解决子域session共享问题:

@Bean
	public CookieSerializer cookieSerializer() {
		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
		serializer.setCookieName("JSESSIONID"); 
		serializer.setCookiePath("/"); 
		serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$"); 
		return serializer;
	}

谷粒商城-认证服务_第162张图片

谷粒商城-认证服务_第163张图片

解决使用json序列化方式来序列化对象数据到redis中

传送门:spring-session/SessionConfig.java at 2.4.6 · spring-projects/spring-session · GitHub

@Configuration
public class SessionConfig implements BeanClassLoaderAware {

	private ClassLoader loader;

	@Bean
	public RedisSerializer springSessionDefaultRedisSerializer() {
		return new GenericJackson2JsonRedisSerializer(objectMapper());
	}
}

谷粒商城-认证服务_第164张图片

 

谷粒商城-认证服务_第165张图片

@Configuration
public class GulimallSessionConfig {
    /**
     * 子域问题共享解决
     */
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        cookieSerializer.setDomainName("gulimall.com");
        cookieSerializer.setCookieName("GULIMALLSESSION");
        return cookieSerializer;
    }

    /**
     * 使用json序列化方式来序列化对象数据到redis中
     */
    @Bean
    public RedisSerializer springSessionDefaultRedisSerializer() {
       return new GenericJackson2JsonRedisSerializer();
    }
}

给product服务和auth服务各配置一份

谷粒商城-认证服务_第166张图片

谷粒商城-认证服务_第167张图片

前端页面修改,需要进行非空判断

谷粒商城-认证服务_第168张图片

将redis和客户端的session进行清空

商城业务-认证服务-SpringSession原理

@EnableRedisHttpSession注解导入了RedisHttpSessionConfiguration.class这个配置类

谷粒商城-认证服务_第169张图片

在 RedisHttpSessionConfiguration.class这个配置类,为容器中注入了一个组件

sessionRepository  ->  sessionRedisOperations : redis操作session,实现session的增删改查

谷粒商城-认证服务_第170张图片

谷粒商城-认证服务_第171张图片 调用SpringHttpSessionConfiguration中的springSessionRepositoryFilter()方法,获取一个

 SessionRepositoryFilter对象,调用doFilterInternal()对原生的request和response对象进行封装即装饰者模式,request对象调用getSession()方法就会调用wrapperRequest对象的getSession()方法

谷粒商城-认证服务_第172张图片

谷粒商城-认证服务_第173张图片

谷粒商城-认证服务_第174张图片

商城业务-认证服务-页面效果完成

通过账号密码登录的用户信息也保存到session中

①编写一个可修改的属性key

谷粒商城-认证服务_第175张图片

② 用户信息也保存到session中

谷粒商城-认证服务_第176张图片

谷粒商城-认证服务_第177张图片

③设置默认的昵称

谷粒商城-认证服务_第178张图片

④ 登录后,首页页面细化

谷粒商城-认证服务_第179张图片

已经登录的话,在进入登录页要实现跳转首页的效果

①自己编写业务逻辑,将自动页面映射注释

谷粒商城-认证服务_第180张图片

②编写接口

商品详情页,用户昵称显示

谷粒商城-认证服务_第181张图片 

搜索页,用户昵称显示

①导入依赖

谷粒商城-认证服务_第182张图片

 
        
            org.springframework.session
            spring-session-data-redis
        
        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

 ②配置

谷粒商城-认证服务_第183张图片

③ 开启共享session功能

谷粒商城-认证服务_第184张图片

④ 复制配置类

谷粒商城-认证服务_第185张图片

⑤ 前端代码

谷粒商城-认证服务_第186张图片

商城业务-认证服务-单点登录简介

什么是单点登录?只要注册了登录某一个服务就可以自动登录其它所有服务,例如:注册登录了谷粒商城,则可以自动登录在线教育、众筹系统等

谷粒商城-认证服务_第187张图片

商城业务-认证服务-补-框架效果演示

1.码云搜索xxl,下载单点登录的开源框架

谷粒商城-认证服务_第188张图片

传送门:xxl-sso: 一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。 拥有"轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性;。现已开放源代码,开箱即用。

2.配置域名 

ssoserver.com 作为认证中心的域名,client1.com、client2.com分别作为客户端1和客户端2的域名

3. 修改认证中心和客户端的配置文件

谷粒商城-认证服务_第189张图片

谷粒商城-认证服务_第190张图片

谷粒商城-认证服务_第191张图片

谷粒商城-认证服务_第192张图片

4.进行打包

mvn clean package -Dmaven.skip.test=true

谷粒商城-认证服务_第193张图片

5.启动认证中心和客户端

谷粒商城-认证服务_第194张图片谷粒商城-认证服务_第195张图片

 谷粒商城-认证服务_第196张图片

认证中心访问路径:http://ssoserver.com:8080/xxl-sso-server
客户端1访问路径:http://client1.com:8081/xxl-sso-web-sample-springboot
客户端2访问路径:http://client2.com:8082/xxl-sso-web-sample-springboot

商城业务-认证服务-单点登录流程-1

单点登录的核心逻辑:

谷粒商城-认证服务_第197张图片

单点登录的第一步流程:

谷粒商城-认证服务_第198张图片1.使用初始化向导创建认证中心和客户端服务

谷粒商城-认证服务_第199张图片

谷粒商城-认证服务_第200张图片谷粒商城-认证服务_第201张图片

修改客户端服务的端口号 

谷粒商城-认证服务_第202张图片

2. 编写接口

谷粒商城-认证服务_第203张图片

谷粒商城-认证服务_第204张图片

配置认证中心的认证地址 

当认证中心认证完成之后,让认证中心知道你要跳转回的地址?解决方案就是在请求参数中携带跳转回的地址

谷粒商城-认证服务_第205张图片

编写list页面

3. 编写处理认证的请求

谷粒商城-认证服务_第206张图片

谷粒商城-认证服务_第207张图片编写login页面 

谷粒商城-认证服务_第208张图片

商城业务-认证服务-单点登录流程-2

1.编写一个隐藏的input框,用于存储调回的url

谷粒商城-认证服务_第209张图片

谷粒商城-认证服务_第210张图片2.导入redis的依赖,配置redis 

 

3. 登录成功保存用户信息并传递token

4. 拿到令牌需要去认证中心查询用户的信息,这里只是简单保存了以下并没有模拟 

谷粒商城-认证服务_第211张图片

商城业务-认证服务-单点登录流程-3

1.认证中心编写接口查询用户信息

谷粒商城-认证服务_第212张图片

2.去认证中心查询用户信息

谷粒商城-认证服务_第213张图片

3.复制client服务,并修改端口、服务名等信息

谷粒商城-认证服务_第214张图片 

 谷粒商城-认证服务_第215张图片

谷粒商城-认证服务_第216张图片

 4.实现一次登录,处处登录的核心就是认证通过之后给浏览器留下一个痕迹,凡是访ssoserver.com这个域名的都会带上这个痕迹,通过使用cookie实现

谷粒商城-认证服务_第217张图片

你可能感兴趣的:(尚硅谷谷粒商城,谷粒商城,短信验证码,社交登录,SpringSession,单点登录)