1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java单点登录统一认证 JEECG 集成KiSSO单点登录实现统一身份认证

java单点登录统一认证 JEECG 集成KiSSO单点登录实现统一身份认证

时间:2018-08-07 15:58:33

相关推荐

java单点登录统一认证 JEECG 集成KiSSO单点登录实现统一身份认证

JEECG 集成KiSSO单点登录实现统一身份认证

JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录?

第三方系统如何对接呢?

今天为大家揭开这层面纱,让大家了解实质,使用它更快速的构建大家需要的业务

一、KISSO单点登录介绍

kisso 采用的是加密会话 cookie 机制实现单点登录 SSO 服务,具备“无状态”、“分散验 证” 等特性。

1、session 存放在服务器端,cookie 存放在客户端,存在 2 种状态:“ 第一种:持久 cookie 具有时效性,以文件的形式存放在客户机硬盘中, 时间一到生命周期结束自动被删除。第二种:临时 cookie 又叫会话 cookie 放在浏览器 内存中,浏览器关闭生命周期结束自动失效 ”。

2、单纯不做任何改变而言 session 更安全,如果 cookie 采取各种安全保护措施,此时的 cookie 一样安全。

3、cookie 轻松实现分布式服务部署,单点登录跨域访问等问题,换成 session 需要处理 session 复制及各种问题实现困难。

二、JEECG集成KiSSO实现统一身份认证服务

JEECG系统作为服务端,实现统一身份认证服务,为其他第三方系统提供统一登录入口,共享用户资源,实现同一个用户名和密码登录多个系统。

那JEECG如何实现的服务呢?下面切入正题。

1、服务端集成KISSO

(1) JEECG 工程 Maven依赖相关的jar

com.baomidou

kisso

3.6.11

com.alibaba

fastjson

1.2.15

(2)服务端项目配置文件。kisso启动配置有两种配置方式:spring方式初始化、Servlet方式初始化。根据不同的工程结构选择合适的配置方式,JEECG使用的是springMVC框架,我这里选择使用spring方式初始化方式。

下面两种初始化方式如下:

第一种:spring方式初始化方式

第二种:Servlet方式初始化

kissoConfigLocation

classpath:sso.properties

com.baomidou.kisso.web.KissoConfigListener

这两种方式,都会加载一个属性配置文件sso.properties该文件放到classpath下

sso.properties 配置文件内容:

#单点登录信息加密密钥

复制代码

至此,服务端集成完成,sso.properties 需要注意的是:sso.secretkey单点登录信息加密密钥,此秘钥在登录完成后会把用户的信息通过此秘钥进行加密,保存到cookie中,为了安全不要泄露此密钥;sso.cookie.domain是单点登录域名配置,配置一级域名。JEECG服务端系统和第三方对接的客户端系统需要在同一个域名下,跨域的问题暂不考虑。

本地调试时服务的访问一定要使用域名,系统host配置域名即可。

2、JEECG统一身份认证服务代码实现原理

JEECG系统集成配置完成,那么怎么实现的统一登录服务呢?

JEECG系统原有的登录时不能给第三方系统提供统一登录服务,为了不印象原有的系统业务,我们需要另外实现一个登录入口代码如下:(:8080/jeecg/toLogin.do)

/**

* 单点登录

* @author zhoujf

*

*/

@Controller

@RequestMapping("/")

public class SSOController extends BaseController{

private Logger log = Logger.getLogger(SSOController.class);

@RequestMapping(value = "toLogin")

public String toLogin(HttpServletRequest request) {

String returnURL = request.getParameter("ReturnURL");

log.info("SSO 资源路径returnURL:"+returnURL);

request.setAttribute("ReturnURL", returnURL);

return "login/login";

}

}

第三方客户端集成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配置域名,不能使用ip)

sso.cookie.domain=.

#服务端登录地址

sso.login.url=:8080/jeecg/toLogin.do

sso.properties 需要注意的是:sso.secretkey单点登录信息加密密钥,和服务端配置保持一致;

sso.cookie.domain是单点登录域名配置,配置一级域名。和服务端配置保持一致;跨域的问题暂不考虑。

sso.login.url 是服务端实现的统一登录服务入口地址

本地调试时服务的访问一定要使用域名,系统host配置域名即可。

以上 第三方系统对接统一认证服务完成!!

2、测试验证方法

(1)启动JEECG服务端项目

(2)启动第三方系统

(3)找一个第三方系统的请求测试

例如:/jeecg-p3-web/system/back.do?index

请求后,未登录的情况下,跳转到JEECG统一认证系统进行登录,地址如下:

:8080/jeecg/toLogin.do?ReturnURL=http%253A%252F%%252Fjeecg-p3-web%252Fsystem%252Fback.do%253Findex

登录之后,回跳到地址/jeecg-p3-web/system/back.do?index

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。