基于JEECG集成KiSSO单点登录的集成认证
JEECG如何为其他第三方系统提供统一认证服务,实现单点登录?
第三方系统如何对接?
今天为大家揭开这个面纱,让大家了解本质,用它更快地构建大家需要的业务
一、KISSO单点登录介绍
kisso采用加密会话cookie机制实现单点登录SSO服务,具有“无状态”、“分布式认证”等特性。
1、会话在服务器端,cookie在客户端,有两种状态。 “第一,持续的cookie是时效性的,以文件形式存储在客户端硬盘上,在生命周期结束时自动删除。 第二,临时cookie (也称为会话cookie )存储在浏览器内存中,并在浏览器结束生命周期时自动禁用。”
2、如果不单纯改变什么的话,session更安全。 如果饼干采取了各种安全措施的话,和这时的饼干一样安全。
3、cookie轻松实现分布式服务部署,单点登录解决域间访问等问题,转变为会话需要解决会话复制和各种问题的实现困难。
二、JEECG集成KiSSO实现统一认证服务
JEECG系统作为服务端,实现统一的认证服务,为其他第三方系统提供统一的登录入口,共享用户资源,使用相同的用户名和密码登录多个系统。
那么,JEECG是如何实现的服务呢? 进入正题吧。
1、服务端整合KISSO
(1) JEECG工程Maven依赖相关的jar
com.baomidou
kisso
3.6.11
com.alibaba
快速强森
1.2.15
)2)服务端项目配置文件。 kisso启动配置有spring方式初始化和servlet方式初始化两种配置方式。 根据工程结构选择合适的配置方式。 JEECG使用了springMVC框架。 在此选择使用spring方式的初始化方式。
有两种初始化方法:
第一种是spring方式的初始化方式
第二个: servlet方式的初始化
kisso配置
classpath:sso.properties
com.Bao midou.kisso.web.kissoconfiglistener
这两种方法都将加载属性配置文件sso.properties并将其放置在classpath下
sso.properties配置文件内容:
#单点登录信息加密密钥复制码
至此,服务端整合完成。 sso.properties必须注意sso.secretkey单点登录信息加密密钥。 此密钥在登录完成后用此密钥加密用户的信息,并保存在cookie中。 为了防止安全泄露这个密钥。 sso.cookie.domain是一次登录域名配置,配置一级域名。 JEECG服务终端系统和第三方坞站的客户端系统必须位于同一域名下,并且不考虑域间问题。
本地调试时访问服务时必须使用域名,系统主机设置域名test.com即可。
2、JEECG统一认证服务代码的实现原理
JEECG系统集成配置完成后,如何实现集成登录服务?
JEECG系统现有登录时不能为第三方系统提供统一的登录服务。 为了不映像现有的系统业务,必须实现其他登录条目代码。 (3358 SSO.test.com 33608080/je ECG/tolo gin.do )。
//*
*单点登录
* @author zhoujf
*
*/
@Controller
@请求映射((/) )。
publicclasssocontrollerextendsbasecontroller {
privateloggerlog=logger.getlogger (SSO controller.class;
@requestmapping(value=’tologin ‘ () ) ) ) ) ) ) ) 65
publicstringtologin (httpservletrequestrequest ) {
string returnurl=request.getparameter (‘ returnurl );
log.info(SSO资源路径returnURL:’ returnURL ‘
request.set attribute (返回、返回);
返回’ log in/log in ‘;
}
}
如果第三方客户端集成到KISSO后尚未登录,请跳到此地址并登录。 跳转到此地址时,它带有参数ReturnURL,这是第三方系统当前访问的请求
地址,JEECG服务端登录后会再回跳到这个地址。以上代码段在进入登录页面后把回跳地址带入登录页面,以便登录后回跳该地址
那么服务端,登录回跳怎么实现的呢?下面在登录逻辑中增加如下代码即可实现:
//———————–单点登录————————————————-
/*
* 单点登录 – 登录需要跳转登录前页面,自己处理 ReturnURL 使用
* HttpUtil.decodeURL(xx) 解码后重定向
*/
String returnURL = (String)request.getSession().getAttribute(“ReturnURL”);
log.info(“login 资源路径returnURL:”+returnURL);
if(StringUtils.isNotEmpty(returnURL)){
SSOToken st = new SSOToken(request);
st.setId(UUID.randomUUID().getMostSignificantBits());
st.setUid(user.getUserName());
st.setType(1);
//request.setAttribute(SSOConfig.SSO_COOKIE_MAXAGE, maxAge);
// 可以动态设置 Cookie maxAge 超时时间 ,优先于配置文件的设置,无该参数 – 默认读取配置文件数据 。
// maxAge 定义:-1 浏览器关闭时自动删除 0 立即删除 120 表示Cookie有效期2分钟(以秒为单位)
//request.setAttribute(SSOConfig.SSO_COOKIE_MAXAGE, 60);
SSOHelper.setSSOCookie(request, response, st, true);
returnURL = HttpUtil.decodeURL(returnURL);
log.info(“login 资源路径returnURL:”+returnURL);
request.getSession().removeAttribute(“ReturnURL”);
try {
response.sendRedirect(returnURL);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//————————单点登录———————————————-
以上服务端统一登录服务就完成了!!!!
三、第三方系统对接JEECG统一认证服务
1、第三方系统KISSO集成
(1) 客户端 工程 Maven依赖相关的jar
com.baomidou
kisso
3.6.11
com.alibaba
fastjson
1.2.15
(2)第三方项目配置文件。kisso初始化以及登录验证拦截器配置有两种配置方式:spring方式初始化、Servlet方式初始化。根据不同的工程结构选择合适的配置方式,我这里第三方系统使用的也是springMVC框架,选择使用spring方式初始化方式。
下面两种初始化方式如下:
第一种:spring方式初始化方式
第二种:Servlet方式初始化
kissoConfigLocation
classpath:sso.properties
com.baomidou.kisso.web.KissoConfigListener
SSOFilter
com.baomidou.kisso.web.filter.SSOFilter
over.url
/index.jsp
SSOFilter
/*
这两种方式,都会加载一个属性配置文件sso.properties该文件放到classpath下
sso.properties 配置文件内容:
#单点登录信息加密密钥
sso.secretkey=Kisso4springMvc80mAS
#cookie名称
sso.cookie.name=uid
#cookie单点服务器登录域名(本地测试需要host配置域名test.com,不能使用ip)
sso.cookie.domain=.test.com
#服务端登录地址
sso.login.url=http://sso.test.com:8080/jeecg/toLogin.do
sso.properties 需要注意的是:sso.secretkey单点登录信息加密密钥,和服务端配置保持一致;
sso.cookie.domain是单点登录域名配置,配置一级域名。和服务端配置保持一致;跨域的问题暂不考虑。
sso.login.url 是服务端实现的统一登录服务入口地址
本地调试时服务的访问一定要使用域名,系统host配置域名test.com即可。
以上 第三方系统对接统一认证服务完成!!
2、测试验证方法
(1)启动JEECG服务端项目
(2)启动第三方系统
(3)找一个第三方系统的请求测试
例如:http://sso.test.com/jeecg-p3-web/system/back.do?index
请求后,未登录的情况下,跳转到JEECG统一认证系统进行登录,地址如下:
http://sso.test.com:8080/jeecg/toLogin.do?ReturnURL=http%253A%252F%252Fsso.test.com%252Fjeecg-p3-web%252Fsystem%252Fback.do%253Findex
登录之后,回跳到地址 http://sso.test.com/jeecg-p3-web/system/back.do?index
快三技巧准确率100h (IOException e) {
e.printStackTrace();
}
return null;
}
//————————单点登录———————————————-
以上服务端统一登录服务就完成了!!!!
三、第三方系统对接JEECG统一认证服务
1、第三方系统KISSO集成
(1) 客户端 工程 Maven依赖相关的jar
com.baomidou
kisso
3.6.11
com.alibaba
fastjson
1.2.15
(2)第三方项目配置文件。kisso初始化以及登录验证拦截器配置有两种配置方式:spring方式初始化、Servlet方式初始化。根据不同的工程结构选择合适的配置方式,我这里第三方系统使用的也是springMVC框架,选择使用spring方式初始化方式。
下面两种初始化方式如下:
第一种:spring方式初始化方式
第二种:Servlet方式初始化
kissoConfigLocation
classpath:sso.properties
com.baomidou.kisso.web.KissoConfigListener
SSOFilter
com.baomidou.kisso.web.filter.SSOFilter
over.url
/index.jsp
SSOFilter
/*
这两种方式,都会加载一个属性配置文件sso.properties该文件放到classpath下
sso.properties 配置文件内容:
#单点登录信息加密密钥
sso.secretkey=Kisso4springMvc80mAS
#cookie名称
sso.cookie.name=uid
#cookie单点服务器登录域名(本地测试需要host配置域名test.com,不能使用ip)
sso.cookie.domain=.test.com
#服务端登录地址
sso.login.url=http://sso.test.com:8080/jeecg/toLogin.do
sso.properties 需要注意的是:sso.secretkey单点登录信息加密密钥,和服务端配置保持一致;
sso.cookie.domain是单点登录域名配置,配置一级域名。和服务端配置保持一致;跨域的问题暂不考虑。
sso.login.url 是服务端实现的统一登录服务入口地址
本地调试时服务的访问一定要使用域名,系统host配置域名test.com即可。
以上 第三方系统对接统一认证服务完成!!
2、测试验证方法
(1)启动JEECG服务端项目
(2)启动第三方系统
(3)找一个第三方系统的请求测试
例如:http://sso.test.com/jeecg-p3-web/system/back.do?index
请求后,未登录的情况下,跳转到JEECG统一认证系统进行登录,地址如下:
http://sso.test.com:8080/jeecg/toLogin.do?ReturnURL=http%253A%252F%252Fsso.test.com%252Fjeecg-p3-web%252Fsystem%252Fback.do%253Findex
登录之后,回跳到地址 http://sso.test.com/jeecg-p3-web/system/back.do?index