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 端

  1. 配置文件

    ### 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
    
  2. 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 端

四、核心源码详解

由上可知框架的核心代码在:

  • XxlSsoTokenFilter
  • XxlSsoWebFilter

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);}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部