1.5.6.1.2. 实现方式二:Ticket

实现步骤:

  • 添加页签

    新建插件sso

    按下面的定义,在协同的webapps\seeyon\WEB-INF\cfgHome\plugin\sso目录下新建一个XML文件pluginCfg.xml,例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <plugin>
        <id>sso</id>
        <name>单点登录模块</name>
        <category>11001</category>
    </plugin>

    然后在协同的webapps\seeyon\WEB-INF\cfgHome\plugin\sso\spring目录下新建一个XML文件,如myspace.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans default-autowire="byName">
        <!-- id必须唯一 -->
        <bean id="sinaNewsSpace" class="com.seeyon.v3x.common.thirdparty.ThirdpartySpace" init-method="init">
            <!-- id必须唯一或者不写后台自动生成,必须为数字 -->
            <property name="id" value="-2327812443752403806"/>
            <!-- 页签上显示的名称 -->
            <property name="name" value="Sina News"/>
            <!-- 插件id,必须存在,如果不存在,请按下面的步骤定义一个新的插件 -->
            <property name="pluginId" value="sso"/>
            <!-- 第三方系统登录地址,如果合并3、4步,可以省略 -->
            <property name="loginURL" value="http://xxx.xxx.xxx.xxx/ssologin.jsp"/>
            <!-- 点击页签要打开的第三方系统页面地址 -->
            <property name="pageURL" value="http://xxx.xxx.xxx.xxx/main.jsp"/>
            <!-- 打开方式,值为open时在新窗口打开,为workspace时在协同页面能打开 -->
            <property name="openType" value="open"/>
            <!-- 排序号 -->
            <property name="index" value="4"/>
        <!-- 授权 accessRoles与accessCheck选择其中一个即可-->  
        <property name="accessRoles"> 
          <list> 
            <value>GeneralStaff</value> 
          </list> 
        </property>  
    
       <!-- <property name="accessCheck" ref="accessCheck"/> -->  
      </bean>  
     <!-- <bean id="accessCheck" class="com.seeyon.ctp.ext.Tab.TestThirdpartyAccessCheck"></bean> -->  
    </beans>

    Note

    注意事项:集成的第三方系统,必须先在协同平台的中定义插件

  • myspace.xml参数说明

  • id 唯一标示,这了在XML里必须设置为数字型
    name 名称
    pluginId 插件ID
    loginURL 在进入第三方指定页面前,先跳转到loginURL进行握手 第三方系统根据Ticket回调获取协同身份信息,进行单点登录,并注册Ticket和登录用户的映射, 平台带着Ticket跳转到第三方系统的"页面地址" (pageURL)
    pageURL 第三方指定到达的目的页面。
    openType 打开方式
    accessRoles与accessCheck OA用户对于第三方页签显示权限,详情请见1.5.1. 页签集成。
  • 配置第三方系统,ThirdpartySpace:名称、登录地址、页面地址、打开方式【详情请见1.5.1. 页签集成】

  • 登录过程

    • 在协同中点击"空间页签"

    • 平台产生Ticket,并维护在内存中

    • 平台带着Ticket访问第三方系统的"登录地址"(loginURL)进行握手 第三方系统根据Ticket回调获取协同身份信息,进行单点登录,并注册Ticket和登录用户的映射, 平台带着Ticket跳转到第三方系统的"页面地址" (pageURL)

  • 说明

    • 第三方系统完全依赖和信任协同的身份验证,Ticket由协同平台发放

    • 第三方系统使用与协同完全相同的登录名或者进行二次开发,自己维护协同登录名与第三方系统用户的映射表

    • 如果当前用户已经登录第三方系统,将跳过② ③,直接到第4步,使用相同的Ticket

      • 认证ticket/获取身份信息的接口系统提供Servlet:http://a8:80/seeyon/thirdpartyController.do?ticket=**;平台将通过response header的LoginName返回登录名

      • 如果第三方回调后认为有异常,请在response header增加名称为SSOLogoutError的信息

      • 在上面myspace.xml中(loginURL)获取当前人员登录名例程如下:

      • //获取ticket
        String ticketinfo=request.getParameter("ticket");
        //通过ticket/获取身份信息的接口获取登录信息
        String LoginNameUrl="http://127.0.0.1/seeyon/thirdpartyController.do?ticket="+ticketinfo;
        //通过HttpClientUtil发送请求
        HttpClientUtil u = new HttpClientUtil();
        //获取登录名
        String LoginName=u.getContent(LoginNameUrl).toString();
    • 第三方系统退出时,要通知协同,地址是http://a8:80/seeyon/thirdparty.do?method=logoutNotify&ticket=**

    • 根据情况可将 ③ ④步合并 (省略loginURL)