谷粒商城实战(017 业务-单点登录)

本文详细介绍了如何在Java项目《谷粒商城》中实现单点登录,涉及SSO原理、SpringBoot2.1.12版本的配置、Nacos的使用,以及使用Cookie和JWT+Sercurity进行安全登录。还讨论了单点登录的优缺点和现代趋势。

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强

总时长 104:45:00 共408P

此文章包含第231p-第p235的内容


介绍

单点登录(Single Sign-On,SSO)是一种身份验证服务,允许用户使用一组凭据(例如用户名和密码)登录到多个相关但相互独立的软件系统中。在用户进行了一次登录认证后,他们就可以访问其他受信任的系统而无需重新进行身份验证。

SSO 的实现通常包括以下组件:

身份提供者(Identity Provider,IdP):负责认证用户并颁发令牌。用户只需要在身份提供者进行一次登录,然后可以通过令牌访问其他受信任的系统。

服务提供者(Service Provider,SP):受信任的应用程序或服务,依赖于身份提供者来验证用户身份。SP 接受来自身份提供者的令牌,并使用该令牌来授权用户访问其资源。

令牌(Token):由身份提供者颁发的安全令牌,包含有关用户身份和权限的信息。SP 在接收到令牌后,通过验证令牌的签名和有效期来确认用户的身份,并决定是否授权用户访问。

实现 SSO 的方法有多种,其中包括:

基于标准协议的 SSO:使用标准协议(如OAuth、OpenID Connect、SAML等)来实现 SSO。这些协议定义了身份验证和授权的流程,使得不同的系统可以与不同的身份提供者进行集成。

集中式身份管理系统:使用专门的身份管理系统来集中管理用户身份和权限,各个系统通过与该身份管理系统进行集成来实现 SSO。

基于令牌的 SSO:用户在登录时获取一个令牌,然后将该令牌用于访问其他系统。这种方式可以避免在每次访问时都需要与身份提供者进行通信。

SSO 的优点

包括提高用户体验、简化身份管理、减少密码重复使用等。然而,也需要注意安全性和隐私保护等方面的考虑,确保用户的身份信息不被泄露或滥用。

在这里插入图片描述
一处登录处处可用

单点登录示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
火绒也可以直接修改hosts(不推荐)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
已经聚合了其他三个项目,所以打包一次其他的都会打包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改配置文件重新打包
在这里插入图片描述

在这里插入图片描述

失败 原因 无法在maven仓库里找到核心包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还是报错的话 就整个项目重新打包

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
跳转到
在这里插入图片描述
在这里插入图片描述

编写单点登录

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
选择springBoot2.1.12版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里写配置到nacos里好一些,这种可能会被修改的,上线之后,不让改了,写配置可以用nacos改

响应里带location 是要重定向到这个location上
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

加粗样式
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
命令浏览器重定向到这个网址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

新建第二个客户端

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用@CookieValue标签获取当前请求的cookie值
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

cookie是放在sso域名下的,不管访问哪个客户端,都会判断是否登录,没有登录都会来到sso下,因为第一个客户端登录了留下了cookie并且在sso域名下,第二个就不用再登录就能携带第一个客户coo

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

在单点登录认证系统里添加一个方法来解析token

在这里插入图片描述

在客户端的单点登录方法里调用认证系统的解析方法

这里不要用feign 因为认证系统可能不是java写的(如可能是php写的) (openFeign是springCloud封装的http请求)
最好用http工具类 如HttpUtils或spring的restTemplate
在这里插入图片描述

得到响应的值
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
要登录其他人的得先退出登录,这个单点登录解决的是多个项目之间公用一个登录号
在这里插入图片描述

效果

在这里插入图片描述

在这里插入图片描述

这里使用的是cookie和session进行单点登录,现在已经不流行了,可以使用jwt + serurity单点登录


谷粒商城平台发布商品时,如果商品介绍图片上传失败,通常可能是由于文件存储服务(如阿里云OSS)的配置问题、网络请求异常或后端服务未正确处理请求所致。根据引用中提到的一些常见问题及解决方案,以下是可能的解决方法: ### 1. 检查OSS配置是否正确 商品图片上传通常依赖于对象存储服务(如阿里云OSS)。如果OSS的配置信息缺失或错误,会导致上传失败。例如,`ossClient`实例创建失败时会抛出类似 `Oss endpoint can't be empty` 的异常[^4]。 **解决方法:** - 确保在配置文件(如`application.yml`或`bootstrap.yml`)中正确配置了OSS的访问密钥、Endpoint、Bucket名称等信息。 - 检查是否在Nacos配置中心中正确配置了OSS相关的参数,并确保服务能够正确拉取这些配置。 ### 2. 确保Nacos服务注册与配置中心正常工作 如果网关或相关服务无法从Nacos获取配置或服务实例,可能导致请求失败。例如,引用中提到的503错误与服务未在Nacos中注册或配置名称不一致有关[^1]。 **解决方法:** - 登录Nacos控制台,确认`renren-fast`等服务已成功注册。 - 确认服务的`Data ID`和`Group`与配置文件中的名称一致。 - 如果服务配置有误,可以尝试重新引入Nacos客户端依赖并重启服务[^1]。 ### 3. 检查Spring BootSpring Cloud版本兼容性 版本不兼容也可能导致服务启动失败或某些Bean无法正确注入,从而影响图片上传功能。例如,Spring Boot版本过高可能导致与Spring Cloud组件的兼容性问题[^3]。 **解决方法:** - 确保使用的Spring BootSpring Cloud Alibaba版本兼容。 - 参考引用中使用的版本配置,例如将Spring Boot版本调整为`2.2.1.RELEASE`或`2.1.8.RELEASE`,Spring Cloud Alibaba版本为`2.1.0.RELEASE`[^3]。 ### 4. 检查网关依赖配置 在网关服务中,如果引入了不兼容的依赖或缺少必要的配置,可能导致请求被拦截或转发失败。 **解决方法:** - 确保网关服务中没有引入冲突的依赖,如引用中提到的`spring-cloud-starter-netflix-ribbon`可能导致的问题[^2]。 - 可尝试注释掉`gulimall-common`中可能导致冲突的依赖,并引入`spring-cloud-loadbalancer`以替代。 ### 5. 检查前端上传请求与后端接口匹配 商品图片上传功能依赖于前后端接口的正确对接。如果接口路径、参数名称或请求方式不匹配,也可能导致上传失败。 **解决方法:** - 使用浏览器开发者工具(F12)查看上传请求的URL、请求头、请求体是否正确。 - 确认后端Controller方法是否正确接收并处理了上传请求,例如使用了`@RequestParam("file") MultipartFile file`等注解。 ### 示例代码:OSS上传接口示例 ```java @RestController @RequestMapping("/oss") public class OssController { @Autowired private OSS ossClient; @Value("${aliyun.oss.bucket}") private String bucketName; @PostMapping("/upload") public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return ResponseEntity.badRequest().body("File is empty"); } String fileName = UUID.randomUUID() + file.getOriginalFilename(); try { ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(file.getBytes())); String fileUrl = "https://" + bucketName + "." + "oss-cn-beijing.aliyuncs.com" + "/" + fileName; return ResponseEntity.ok(fileUrl); } catch (IOException e) { return ResponseEntity.status(500).body("Upload failed"); } } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值