开源项目之kisso
kisso开源项目:https://gitee.com/baomidou/kisso
一、简介
kisso = cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞 士军刀。
应用场景如下:
1.支持单点登录
2、支持登录Cookie缓存
3、支持防止 xss攻击, SQL注入,脚本注入
4、支持 Base64 / MD5 / AES / PBE / RSA 算法
5、支持浏览器客户端校验
6、支持Cookie参数配置及扩展
7、支持跨域登录,模拟登录
8、支持在线人数统计
9、支持生成动态图片验证码
10、支持 app 移动端 api 服务验证,采用微信公众平台 api 验证机制认证
11、支持踢出指定登录用户
二、kisso 是什么原理与 cas 区别
1.kisso原理说明
kisso 采用的是加密会话 cookie 机制实现单点登录 SSO 服务,具备“无状态”、“分散验证” 等特性。
a.session 存放在服务器端,cookie 存放在客户端,存在 2 种状态:
第一种:持久 cookie 具 有时效性,以文件的形式存放在客户机硬盘中, 时间一到生命周期结束自动被删除;
第二种:临时 cookie 又叫会话 cookie 放在浏览器内存中,浏览器关闭生命周期结束自动失效。
b.单纯不做任何改变而言 session 更安全,如果 cookie 采取各种安全保护措施,此时的 cookie 一样安全。
c.cookie 轻松实现分布式服务部署,单点登录跨域访问等问题,换成 session 需要处理 session 复制及各种问题实现困难。
2.kisso与cas的区别
a.cas 是单点登录系统,它给你制定好了规则按照它的要求做就可以,配置(复杂)好一切即可实 现单点登录;
b.kisso 是一个中间件,提供 cookie 搭建 java web sso 的组件式解决方案。你不管使用任何架构都可以使用它,就像一个 U 盘需要使用就插入、不用就拔掉。
c.cas 集中验证,所有请求都由 cas 集中验证,缺点cas服务压力巨大。kisso 分散验证,由各个系 统验证 cookie 合法性,缺点秘钥要保护好。
3.maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kisso</artifactId>
<version>3.6.10</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
<version>1.50</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.46</version>
</dependency>
注意:
(1)如果想自己实现 Token 解析,实现 com.baomidou.kisso.common.parser.SSOParser 类 (解析接口类),修改配置文件 sso.properties 属性 sso.parser.class 此时 kisso 会调用您定义的解析类,不需要再依赖 fastjson 库。
(2)自己实现 Token 加密,实现 com.baomidou.kisso.common.encrypt.SSOEncrypt 类(加密解密接口类),修改配置文件 sso.properties 属性 sso.encrypt.class 不在需要依赖 bcprov 库
三、sso.properties如何配置
配置如下,其他均可以采用默认配置
sso.secretkey=56jp2s5q83ZTE74ri6
sso.cookie.domain=.baomidou.com
sso.login.url=http://demo.baomidou.com:8080/Blog/views/login.html
四、配置
1.web.xml配置
<!-- SSO 配置 --> <context-param> <param-name>kissoConfigLocation</param-name> <param-value>classpath:properties/sso.properties</param-value> </context-param> <listener> <listener-class>com.baomidou.kisso.web.KissoConfigListener </listener-class> </listener>
2.spring-mvc.xml配置
<!-- KISSO 初始化 --> <bean id="kissoInit" class="com.baomidou.kisso.web.WebKissoConfigurer" initmethod="initKisso"> <property name="ssoPropPath" value="properties/sso.properties" />
</bean> <mvc:interceptors> <!-- SSO 拦截器 --> <!-- path 对所有的请求拦截使用/**,对某个模块下的请求拦截使用:/myPath/* -->
<mvc:interceptor>
<mvc:mapping path="/**" /> <bean class="com.baomidou.kisso.web.spring.SSOInterceptor" />
</mvc:interceptor> </mvc:interceptors>
两种方式任选一种即可
五、项目模块
六、跨域原理
七、Web访问流程图
八、移动端API访问流程图