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

<!-- kisso begin -->
<dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>kisso</artifactId>
      <version>3.6.11</version>
</dependency>
<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
       <version>1.2.15</version>
</dependency>
<!-- kisso end -->

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

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

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

<bean id="kissoInit" class="com.baomidou.kisso.web.WebKissoConfigurer" init-method="initKisso">
            <property name="ssoPropPath" value="sso.properties" />
            <!-- 不同环境配置选择设置 ,dev_mode/开发模式 ,test_mode/测试模式 ,online_mode/生产模式-->
            <property name="runMode" value="test_mode" />
</bean>

第二种:Servlet方式初始化

<context-param>
         <param-name>kissoConfigLocation</param-name>
         <!-- SSO 属性文件地址根据实际项目配置 -->
         <param-value>classpath:sso.properties</param-value>
</context-param>
<listener>
         <listener-class>com.baomidou.kisso.web.KissoConfigListener</listener-class>
</listener>

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

sso.properties 配置文件内容:

#单点登录信息加密密钥
sso.secretkey=Kisso4springMvc80mAS
#cookie名称
sso.cookie.name=uid
#cookie单点服务器登录域名(本地测试需要host配置域名test.com,不能使用ip)
sso.cookie.domain=.test.com

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

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

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

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

JEECG系统原有的登录时不能给第三方系统提供统一登录服务,为了不印象原有的系统业务,我们需要另外实现一个登录入口代码如下:(http://sso.test.com: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

<!-- kisso begin -->
<dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>kisso</artifactId>
      <version>3.6.11</version>
</dependency>
<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
       <version>1.2.15</version>
</dependency>
<!-- kisso end -->

(2)第三方项目配置文件。kisso初始化以及登录验证拦截器配置有两种配置方式:spring方式初始化、Servlet方式初始化。根据不同的工程结构选择合适的配置方式,我这里第三方系统使用的也是springMVC框架,选择使用spring方式初始化方式。

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

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

<bean id="kissoInit" class="com.baomidou.kisso.web.WebKissoConfigurer" init-method="initKisso">
            <property name="ssoPropPath" value="sso.properties" />
            <!-- 不同环境配置选择设置 ,dev_mode/开发模式 ,test_mode/测试模式 ,online_mode/生产模式-->
            <property name="runMode" value="test_mode" />
</bean>

<mvc:interceptors>
<!-- SSO 登录验证拦截器 path 对所有的请求拦截使用/**,对某个模块下的请求拦截使用:/myPath/* -->
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.baomidou.kisso.web.interceptor.SSOSpringInterceptor" />
</mvc:interceptor>
<!-- SSO 系统权限拦截器 TODO 需要自己实现拦截器来控制权限处理(菜单权限,功能权限控制) -->

</mvc:interceptors>

第二种:Servlet方式初始化

<context-param>
         <param-name>kissoConfigLocation</param-name>
         <!-- SSO 属性文件地址根据实际项目配置 -->
         <param-value>classpath:sso.properties</param-value>
</context-param>
<listener>
         <listener-class>com.baomidou.kisso.web.KissoConfigListener</listener-class>
</listener>

<!-- SSOFilter use . -->
<filter>
       <filter-name>SSOFilter</filter-name>
       <filter-class>com.baomidou.kisso.web.filter.SSOFilter</filter-class>
       <init-param>
       <param-name>over.url</param-name>
       <!-- 不拦截的请求配置在这里 -->
       <param-value>/index.jsp</param-value>
       </init-param>
</filter>
<filter-mapping>
       <filter-name>SSOFilter</filter-name>
       <url-pattern>/*</url-pattern>
</filter-mapping>

这两种方式,都会加载一个属性配置文件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

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

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

    JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...

  2. springmvc--sso单点登录cas统一身份认证器

    开发环境 maven idea Windows 10 JDK 1.8+ 域名解析的配置 这里通过SwitchHosts来实现:以管理员身份打开 前两个:两个客户端应用的域名 后一个:是服务端的域名. ...

  3. JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案

    问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...

  4. JEECG配置Kisso单点登录

    JEECG配置Kisso单点登录 软件版本 JEECG版本:3.8 1.验证系统表示:kisso服务端 2.业务系统表示:kisso客户端 1.配置服务端和客户端 根据官方文档进行配置(http:// ...

  5. SSO单点登录简析 身份认证 安当加密

    本文介绍SSO概念和简略方案原理,不拆解协议细节. 一.身份认证 身份是一切信任的基础.基于身份的信任思维就是不信任企业内部和外部的任何人.任何系统,需要基于身份认证和授权,执行以身份为中心的访问控制 ...

  6. LDAP服务器ca系统,基于LDAP的统一身份认证系统与CA认证的集成.pdf

    基于LDAP的统一身份认证系统与CA认证的集成 , 第 33 卷 第 8 期 宜春学院学报 Vol. 33 No. 8 2011 年 8 月 Journal of Yichun College Aug ...

  7. signature=4f0a1c9773fc07031e260b016c514c92,基于LDAP的统一身份认证系统设计与实现

    摘要: 随着IT技术和网络技术的蓬勃发展,各种基于网络的应用系统已在当前的商业环境中大量存在.因商业应用业务需要,用户每天可能需要登录到许多不同的应用系统.为保证安全性,通常各系统均要求对用户进行身份 ...

  8. 【集合】统一身份认证(CAS)和OAuth2的工作流程

    一.CAS协议 单点登录SSO(Single Sign ON),指在多个应用系统中,只需登录一次,即可在多个应用系统之间共享登录.如:在学校登录了OA系统,再打开科研.教务系统,都会实现自动登录. 统 ...

  9. Dynamics 365 CRM 接入统一身份认证平台(单点登录集成)

    打算将D365 CRM接入公司统一身份认证平台. 前提:D365 已IFD部署,因为要借助ADFS来完成单点登录. 登录ADFS服务器,打开ADFS,本次集成,统一身份认证为上游,ADFS是下游,因为 ...

最新文章

  1. 【Java8新特性】浅谈方法引用和构造器引用
  2. WEB测试 test case测试点
  3. Spring Cloud学习笔记-010
  4. 了解c语言程序员(工程师)岗位需要掌握哪些能力?_码畜,码农,码皇,程序员有什么区别?...
  5. linux 文件系统覆盖目录,Linux内核裁减及根文件系统定制
  6. 微信小程序把玩(十八)picker组件
  7. 安装好了python环境后如何打开_教你如何安装Python环境
  8. C++中多态的基本概念以及虚表的基本概念
  9. BZOJ2957 楼房重建
  10. urllib常用小记
  11. PAT1023. 组个最小数
  12. java 装饰者_java装饰者模式怎么用?
  13. ELK下es索引管理工具-curator
  14. No package ‘libpeas-1.0‘ found/No package ‘libpeas-gtk-1.0‘
  15. WebStorm汉化教程
  16. LaTeX数学符号汇总
  17. XueTr(PC Hunter) pro 注册分析
  18. 通配符 [概述][Java]
  19. 数据库--聚集函数及其应用
  20. FITC-Dextran,Dextran-FITC,右旋糖酐荧光素,一种被标记的多糖

热门文章

  1. mvn 安装本地jar
  2. 3 Symmetry Group
  3. 开发自己的脚手架(react)
  4. linux忘记root密码grab,安装完Linux后相关配置
  5. Eclipse Mar 清空控制台/运行中 闪退 MacOs
  6. 《SQL必知必会》第六课 用通配符进行过滤 使用LIKE操作符,%、[]、_通配符进行通配搜索
  7. as ssd测试软件得分分析,关于AS SSD Benchmark软件和4K读写性能浅析
  8. 2d加速 stm32_emWin做人机用户界面显示刷屏慢? 试试带2D图形加速的GUI图形屏
  9. 欣海关务工作室原创文章——锦囊妙计(八) 对外承包工程
  10. 【蓝桥杯】python153是一个非常特殊的数,它等于它的每位数字的立方和