XXL-SSO 源码解析
一、项目介绍
XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。
前期知识准备
-
Jedis - Redis 推荐的 Java 客户端连接工具
-
XXL-SSO 单点登录架构

-
Ant 表达式
/mapper/**/*Mapper.xml - 匹配 mapper 目录下所有以 Mapper 结尾的 XML 文件
最长匹配原则:url 会匹配更长的 ant 表达式
- ? :匹配任意单个字符
-
- :匹配0/多个字符
- ** : 匹配0/多个目录
-
Java Servlet
二、项目模块
- xxl-sso-core:核心代码
- xxl-sso-samples:客户端简单示例
- xxl-sso-token-sample-springboot:基于 token 接入
- xxl-sso-web-sample-springboot:基于 cookie 接入
- xxl-sso-server:单点登录服务端
三、基本使用
3.1 基于 token 的 Client 端
-
配置文件
### xxl-sso # 中央认证服务地址 xxl.sso.server=http://xxlssoserver.com:8080/xxl-sso-server # 注销地址 xxl.sso.logout.path=/logout xxl-sso.excluded.paths= # redis 地址 xxl.sso.redis.address=redis://127.0.0.1:6379 -
XxlSsoConfig
@Configuration public class XxlSsoConfig implements DisposableBean {@Beanpublic FilterRegistrationBean xxlSsoFilterRegistration() {// 初始化 rdis// 初始化 FilterRegistrationBean(请求过滤器),注入框架自身提供的 XxlSsoTokenFilter 过滤器}@Overridepublic void destroy() throws Exception {// 手动关闭 redisJedisUtil.close();} }
可见 Client 端的逻辑重点落在了 XxlSsoTokenFilter
3.2 Server 端
四、核心源码详解
由上可知框架的核心代码在:
XxlSsoTokenFilterXxlSsoWebFilter
4.2 XxlSsoTokenFilter
两个方法
- init - 主要是设置 ssoServer、logoutPath、excludedPaths
- doFilter - 每次请求验证是否登录的核心方法
doFilters
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain){...// 获取请求路径String servletPath = req.getServletPath();// 判断是否属于排除验证路径之一,路径支持Ant表达式// 验证是否是注销路径//是则执行注销操作SsoTokenLoginHelper.logout(req);// 获取用户信息,为空则返回未登录的提示XxlSsoUser xxlUser = SsoTokenLoginHelper.loginCheck(req);// 不为空则 set 用户信息,方便 clinet 读取使用request.setAttribute(Conf.SSO_USER, xxlUser);
}
4.3 SsoWebLoginHelper
其他逻辑与上面基本一致,只有登录和注销时不一样
public class XxlSsoWebFilter extends HttpServlet implements Filter {// 注销逻辑// remove cookieSsoWebLoginHelper.removeSessionIdByCookie(req, res);// redirect logoutString logoutPageUrl = ssoServer.concat(Conf.SSO_LOGOUT);res.sendRedirect(logoutPageUrl);}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
