前言
单点登录SSO(Single Sign On),凡是有一定的开发经验的童鞋都应该有应用或者了解过,小编还是实习生的时候,看到登录某个应用服务后,再跳转其他应用服务,竟然不用再次登录了,觉得贼拉风,不知道大家第一见这种场景时是不是跟小编一样的感觉。今天小编给大家介绍一款分布式单点登录组件xxl-sso
,目的就是让大家能短时间内快速的应用到项目中,并从中了解其中的相关的实现原理。
项目介绍
xxl-sso
是一款基于redis轻量级分布式高可用的SSO实现组件,支持web端(Cookie实现)和app端(Token实现)两种方式,两种方式的验证都是用Filter实现的,小编之所以叫组件不叫框架,是因为集成起来超级方便,源码也非常易懂。废话不多说,直接进入实战把。
实战
1.认证中心部署
从https://github.com/xuxueli/xxl-sso/下载项目,将xxl-sso-server单独拷贝到自己的创建的项目中(其实直接用就可以了,小编喜欢拷贝过来以便自定义修改),这个模块只需要修改下application.properties中的redis配置就可以了。
### web
server.port=8880
server.servlet.context-path=/xxl-sso-server
### resources
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
### xxl-sso "redis://xxl-sso:password@127.0.0.1:6379/0" redis://xxl-sso:123456@localhost:6379/0
xxl.sso.redis.address=redis://127.0.0.1:6379/0
xxl.sso.redis.expire.minite=1440
这里xxl.sso.redis.address是小编自己本地安装的redis单机默认配置信息,还可以通过逗号分隔进行集群,目前这组件只支持分片集群ShardedJedisPool,组件后续会支持JedisCluster,注意redis://{username}:{password}@{ip}:{port}/{db}这种需要密码的配置方式,密码一定不要带#,!,@,$等特殊符号,ShardedJedisPool初始化链接时会报解析错误。
启动项目,效果如下
image-20200605091638566
好了,认证中心OK了,小编项目太多了,端口这里改成了8880,contextPath为/xxl-sso-server,之所以强调端口和contextPath,是因为应用端要用到。
「注意」 : 认证中心的login接口默认是查的内存,具体业务开发中需要改成读数据库的形式。
2.应用端配置
2.1 创建一个新的spring boot module,引入核心jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-sso-cor