一、介绍

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

官方文档

二、集成

2.1、源码下载

下载地址

2.2、代码结构

在这里插入图片描述

2.3、修改server端配置

在这里插入图片描述

2.4、修改client端配置

在这里插入图片描述

2.5、配置说明

配置说明
xxl.sso.serverSSO Server端地址
xxl.sso.logout.path登出地址(当请求地址是该地址时,会自动出发过滤器中的逻辑,清除redis和cookie中的用户信息,但是退出之后跳转到的Server端登录页后面不携带本系统的地址,所以再次登录时无法正确跳转到本系统,而是进入Server端)
xxl-sso.excluded.paths路径排除Path,允许设置多个,且支持Ant表达式。用于排除SSO客户端不需要过滤的路径
xxl.sso.redis.addressredis address, like “{ip}”、“{ip}:{port}”、“{redis/rediss}😕/xxl-sso:{password}@{ip}:{port:6379}/{db}”;Multiple “,” separated

2.6、测试

2.6.1、分别启动Server端和Client端

Server端地址:http://127.0.0.1:8080/xxl-sso-server/
Client端地址:http://127.0.0.1:8081/xxl-sso-web-sample-springboot/

三、问题

3.1、客户端点击退出后,跳转到服务端,但是此时服务端的URL后并没有拼接客户端的地址,导致再次在服务端登录之后无法正常跳转到客户端

在这里插入图片描述

可以看到客户端中的XxlSsoWebFilter过滤器,也只是重定向到了服务端,并未拼接上客户端的地址信息

解决方案:直接请求服务端的退出逻辑,直接让前端请求服务端的logout接口,或者后端自己重定向到这个接口

3.2、样例无法启动

Exception in thread "main" java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')
	at org.springframework.boot.devtools.restart.DefaultRestartInitializer.getUrls(DefaultRestartInitializer.java:92)
	at org.springframework.boot.devtools.restart.DefaultRestartInitializer.getInitialUrls(DefaultRestartInitializer.java:56)
	at org.springframework.boot.devtools.restart.Restarter.<init>(Restarter.java:139)
	at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:575)
	at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartingEvent(RestartApplicationListener.java:65)
	at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:44)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
	at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:69)
	at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:47)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:292)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1082)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1071)
	at com.xxl.sso.server.XxlSsoServerApplication.main(XxlSsoServerApplication.java:13)
Disconnected from the target VM, address: '127.0.0.1:50178', transport: 'socket'

这里将POM中的热部署依赖移除便可以正常启动
在这里插入图片描述

四、总结

XXL-SSO的原理其实非常的简单
用户访问系统,如果没有登录会被重定向到服务端,在服务端进行登录,登录之后会将生成的认证信息存储在Cookie中,这样,同一个浏览器中的系统请求的时候都会携带上Cookie,这样就可以通过拦截器判断该用户是否登录,以此来实现单点登录的效果

XXL-SSO的集成非常简单,本身也非常的纯粹,没有过多的额外功能,所以登录部分的逻辑是需要自己开发的

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐