0%

单点登录-四-搭建Springboot项目

云服务器的搭建先暂停一下,这里谈论一下思路,搭建之前肯定要确认思路,我是打算试用Springboot+Redis来实现单点登录的,具体的思路:

A.首先将三个服务都启动,分别端口为8080、8081、8082;

B.用户调用系统a的接口,后台对所有请求进行拦截,如果当前用户没有登录,则重定向登录页面;

C.登录页面登录成功后会跳转到系统a的登录成功页面,同时sso服务中心会生成一个唯一的ticket,存储到redis中,设置一个过期时间;

D.用户继续调用系统b的接口,这个时候的b的Domain已经获取到了ticket,它会将带有ticket的url请求提交到sso服务中心,服务中心会将这个ticket和redis中的ticket进行比较,然后肯定相同,因为系统b的ticket本来就和系统a的ticket一样,验证通过直接放行,然后将ticket再次存入到cookie和redis中,同时更新ticket的过期时间;

E.用户退出任意一个系统,就会清空cookie,这个时候访问另一个系统的功能,会发现也已经处于未登录状态,这样就实现了单点登录。

1.搭建一下后台项目结构,新建一个Springboot项目,什么依赖都不需要加,这是作为父项目的,新建成功后,将除了pom文件外的其他文件全部删除,

18.1

2.右键刚刚新建的项目,new一个module,还是Springboot项目Sso-server,专门作为sso的服务认证中心,

18.2

3.右键父项目,new一个module,还是Springboot项目System-a,作为系统a,一会用来登录,

18.3

4.右键父项目,new一个module,还是Springboot项目System-b,作为系统b,一会a系统登录成功,b系统则应该不用登录就能调用结果,

18.5

5.这是整体项目结构,思路和项目结构都明确下来,就开始一步一步编写,

18.4

6.做到这里,我以为已经很完善了,但是我尝试了一下Springboot的拦截器,它拦截不到其他模块的请求!无奈想了半天,我觉得这里有两种解决方案,一个是不做两个系统,在一个系统里面,然后使用postman来直接测试接口,另一个当然就复杂了,使用gateway网关拦截,我思考了一会,选择了使用gateway网关,既然都使用了gateway网关,那不如直接搞个小型的微服务架构出来,所以搭建新模块System-gateway,这里做网关拦截过滤,

image-20201124090913651

image-20201124090953452

总结,这一步其实尤为关键,说实话,现在代码复用率和工具的便捷性那么高,很少需要自原生的去写了,所有思路变得更加重要,要明白实现一个功能点的逻辑,而不是走一步看一步,一个bug改半天,最后发现出发点就不对,诸君共勉。

----------本文结束感谢您的阅读----------