`
zhangdaiscott
  • 浏览: 450025 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8fb25857-16b4-3681-ab5e-e319f45c42a8
Jeecg快速开发平台
浏览量:0
文章分类
社区版块
存档分类

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

<!-- 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 配置文件内容:

  1. <blockquote>#单点登录信息加密密钥
复制代码

        至此,服务端集成完成,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
11.png 

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

22.png 

  • 大小: 29.4 KB
分享到:
评论

相关推荐

    JEECG 单点登录集成文档(kisso集成)

    JEECG单点登录集成文档(kisso集成)详细介绍了如何将Kisso单点登录解决方案集成到JEECG智能开发平台v3版本中。文档中提到了Kisso的基本概念和实现单点登录(SSO)的技术细节,具体包括服务端和客户端的集成步骤以及...

    JEECG 单点登录说明文档

    JEECG智能开发平台的单点登录(SSO)功能是通过集成Kisso实现的,Kisso是一个轻量级Java权限框架,它利用加密会话cookie机制来实现单点登录服务。单点登录是一种用户登录认证方法,允许用户在多个应用系统中,只通过...

    spring boot 集成kisso单点登入

    Spring Boot集成Kisso单点登录(SSO)是一个便捷的方法,可以为多个应用提供统一的登录体验。Kisso,作为一个轻量级的单点登录解决方案,相比CAS(Central Authentication Service)更为简洁,适用于小型项目或快速...

    kisso单点登录

    kisso 采用的是加密会话 cookie 机制实现单点登录 SSO 服务,具备“无状态”、“分散验证” 等特性。 1、session 存放在服务器端,cookie 存放在客户端,存在两种状态:“ 第一种:持久 cookie 具有时效性,以文件的...

    单点登陆实现(完全跨域、单点退出)

    在单点登录系统中,它可以用来存储用户的登录状态,当用户在一处登录后,其他系统可以通过查询Memcached中的状态来确认用户是否已认证,从而实现快速的登录验证。 5. **完全跨域**: 跨域是指浏览器的同源策略限制...

    java 基于 Cookie 的 SSO 中间件 kisso 低代码

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。在Java环境中,实现SSO的一个常见方式是通过Cookie。Kisso是一个基于Cookie的轻量级...

    kisso 单点登录实例,请看使用说明

    项目说明 kisso springmvc 整合。服务端和客户端,整合了redis 作为缓存,处理了一下登录成功之后跳转到访问之前的url

    SpringMvc 基于 kisso 实现的 sso 演示 demo代码完整版

    2、登录成功查看浏览器发现 kisso cookie 骚年你成功集成 kisso 了!! 3、退出访问 http://localhost:8080/logout 查看 kisso cookie 消失 ``` # 权限 ``` 1、登录访问 ...

    kisso 帮助文档-201608151

    kisso 是一个 Java Web 单点登录(SSO)解决方案,采用加密会话 Cookie 机制实现单点登录服务,具备“无状态”、“分散验证”等特性。下面是对 kisso 的详细介绍: kisso 的原理 kisso 采用的是加密会话 Cookie ...

    采用SpringBoot、MyBatis、Shiro、KISSO,开发的一套单点登录权限系统.zip

    标题中的“采用SpringBoot、MyBatis、Shiro、KISSO,开发的一套单点登录权限系统”表明这是一个基于这些技术构建的Web应用程序,主要关注用户认证与授权。让我们详细了解一下这些关键技术及其在系统中的作用。 1. *...

    kisso 帮助文档

    - **定义**: kisso(即cookiesso)是一种基于加密会话cookie机制实现单点登录(SSO)的服务。 - **特点**: - **无状态**: 服务器不保存任何关于用户的状态信息。 - **分散验证**: 每个应用独立验证用户的会话信息。 ...

    源码:struts-kisso375-demo.rar

    而Kisso则是一个轻量级的身份认证与授权框架,它简化了在Java Web应用中实现用户登录、权限控制等安全功能的过程。 在这个"struts-kisso375-demo"示例中,我们看到的是如何将Kisso 3.7.5版本与Struts框架进行整合的...

    kisso-dev.zip

    在当今互联网环境中,单点登录(Single Sign-On,简称SSO)已经成为大型企业或网站集群不可或缺的身份认证解决方案。Kisso,作为一款基于Cookie的SSO中间件,以其轻量级、易用性以及高效的特点,为Java Web开发提供...

    SpringMvc 基于 kisso 的 sso 演示 demo

    2、登录成功查看浏览器发现 kisso cookie 骚年你成功集成 kisso 了!! 3、退出访问 http://localhost:8080/logout 查看 kisso cookie 消失 权限 1、登录访问 http://localhost:8080/test/permission/index.html ...

    kisso中间件 v3.8.3.zip

    Kisso作为一个中间件,可以被集成到各种Web框架中,如Spring Boot,提供统一的认证和授权服务。 5. **源代码分析**:kisso-master文件夹可能包含了Kisso中间件的完整源代码,这对于学习和定制中间件功能非常重要。...

    java 基于 Cookie 的 SSO 中间件 kisso 低代码组件库.zip

    SSO(Single Sign-On)是单点登录的缩写,是一种允许用户在多个应用系统中进行无感知登录的技术。在企业级应用环境中,用户通常需要访问多个相互关联但独立的应用系统,SSO 提供了一种方便的方式来管理和控制这些...

    kisso-master.zip

    kisso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀。

    采用SpringBoot、MyBatis、Shiro、KISSO,开发的一套单点登录权限系统

    该项目利用了基于springboot + vue + mysql的开发模式框架实现的课设系统,包括了项目的源码资源、sql文件、相关指引文档等等。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理...

Global site tag (gtag.js) - Google Analytics