Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强
总时长 104:45:00 共408P
此文章包含第211p-第p219的内容
介绍
认证中心要集成 社交登录、OAuth2.0、单点登录 等功能
- OAuth 2.0:
问题解决: OAuth 2.0 主要解决的是授权问题,允许用户授权第三方应用程序访问其资源,而无需共享其凭据。
实现方式: OAuth 2.0 通过授权服务器颁发访问令牌,该令牌用于代表用户访问受保护的资源。它不直接处理用户的身份验证,而是授予访问权限。
应用场景: 主要用于允许用户在不共享他们的凭据的情况下,让第三方应用程序访问其受保护的资源,如社交媒体资料、云存储等。
- 单点登录(SSO):
问题解决: 单点登录解决的是身份验证问题,允许用户在登录一个系统后,无需重新登录即可访问其他与同一身份验证域相关联的系统。
实现方式: SSO 在用户首次登录时颁发一个身份验证凭据(通常是一个令牌或票据),然后将该凭据用于访问其他相关联的系统,而无需再次提供凭据。
应用场景: 主要用于企业内部系统或跨组织的系统,允许用户在不同的应用程序之间无缝访问,提高用户体验并简化身份管理。
引入通用依赖 然后排除mybatis的依赖
引入openfeign依赖
加上@EnableDiscoveryClient注解
@EnableDiscoveryClient 是 Spring Cloud 提供的一个注解,用于将一个 Spring Boot 应用程序标记为服务发现的客户端。这意味着该应用程序将参与到服务发现中,并且可以通过服务发现来查找和调用其他服务。
它的含义包括:
-
服务注册: 通过将自身注册到服务注册中心(如 Eureka、Consul、ZooKeeper 等),使得其他服务能够发现并调用该应用程序的服务实例。
-
服务发现: 应用程序能够通过服务注册中心来发现其他服务的实例,从而能够动态地调用这些服务,而不需要硬编码它们的位置。
-
集成微服务框架: @EnableDiscoveryClient 是集成了 Spring Cloud 微服务框架的一部分,通过这个注解,应用程序可以与其他微服务框架(如 Ribbon、Feign、Zuul 等)无缝集成,实现更高级的微服务架构。
使用springMVC的viewController 这样就不需要写很多空方法了
发送短信验证码
可以使用这个0元体验的先做测试
使用这个appCode
这里的sign是消息秘书 skin是短信样式
401错误 认证未通过
切记不可以直接使用js进行发送 因为使用F12控制台可以看到APPCODE的值 这样很不安全,其他人可以使用这个APPCODE进行短信发送,所以使用java进行发送
引入Feign依赖,并且使用@EnableFeignClients 开启远程调用
接口防刷(防止恶意快速调用短信接口)
-
引入redis依赖
-
配置redis
-
引入StirngRedisTemplate
4. 编写代码
接口防刷
防刷有很多种,发送次数够X次要滑块之类的;多号码的话,加上ip限制;这里我们只讨论单号码60秒内防刷,以及验证码10分钟过期
记得使用四个参数那个,带过期时间
这里的值使用了code+当前时间的字符串,我觉得用hash存简单一点
空指针异常,这里提前判断一下
注册成功要重定向到登录页
之前的试图映射
本服务重定向可以不用加前缀
重定向防止数据重复提交
两种返回都可以
返回视图逻辑地址,进行拼串
转发
报错
这里的POST请求转发到页面 路径映射只能通过GET请求访问,所有会报错误
利用Spring的HttpServletRequestWrapper快速包装request并重写getMethod返回GET,就可以转发时使用GET~
大家注意。反向代理路径不同会引起Cookie的丢失。导致无法找到session
重定向使用这个
不要写count(1),容易弄巧成拙,自己看看阿里java规约
此处建议查询是否存在时组织上 limit 0,1 效率倍增 !!!
MD5盐值加密
加盐
默认盐值是$1$加随机8位字符
数据库存储撒了盐的密文,然后使用这个方法进行判断 这个方法可以自动解析出带盐的数据
远程调用第三方功能
在注册服务里添加远程服务
切记看看远程服务的配置文件是否在nacos里注册了服务中心地址和服务名称
这里的sql语句有缺陷,一个人的username是另一个人的手机号会有错误