OA对接若依第三方系统时实现单点登录的一些笔记

本文介绍了在OA系统中实现与若依系统单点登录的详细步骤,包括前端创建Vue页面`login_sso.vue`,注册路由,添加白名单过滤,以及在store的user.js中增加单点登录方法。后端部分涉及LoginSsoController的创建,无验证码登录接口的添加,以及Shiro的白名单配置。最终实现用户在OA系统登录后,跳转若依系统页面无需再次登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务需求:

在oa系统里面左侧的菜单栏目里,都是oa自己的,现在需要实现左侧多一个菜单按钮,点击之后直接跳到另一个系统的一个页面(这里使用若依),用户的体验如同在同一个系统一样,并不了解是多个系统对接的。而在其中需要实现单点登录的功能,也就是用户在oa系统登录之后,跳转到第三方系统的页面时并不需要重复的登录。
在这里插入图片描述
本文使用的第三方系统是若依前后端分离版

前端

首先新起一个登录的Vue页面,新增login_sso.vue

在/src/view/下新增login_sso.vue文件作为自动登录的前端入口

<template>
  <div></div>
</template>


<script>

import {
     getInfo} from "@/api/login";

export default {
     
  name: "LoginSso",
  data() {
     
    return {
     
      loginRules: {
     },
      loading: false,
      //验证码开关
      captchaOnOff: true,
      //注册开关
      register: false,
      //重定向
      redirect: undefined,
      userInfo:{
     
        userName:"",
        password:""
      }
    };
  },
  watch: {
     
  },
  created() {
     
    //页面初始化时调单点登录方法
    this.loginSso();
  },
  mounted(){
     



  },
  methods: {
     
    loginSso(){
     
      console.log("获取")
      //获取地址栏中的用户名和密码  这里使用了地址传参,需要在oa系统那里自己配置
      this.userInfo.userName = this.$route.query.userName;
      this.userInfo.password = this.$route.query.password;
      console.log("名字是"+this.userInfo.userName)
      console.log("密码是"+this.userInfo.password)

      //调用登录的接口
      if(this.userInfo.userName==''||this.userInfo.userName==undefined||this.userInfo.userName==null){
     
        //请求中不带名字,拦截为正常登录
      }else{
     
        this.loading = true;//开启过渡动画
        console.log("开启过渡动画")
        const loginInfo = {
     
          "userName" : this.userInfo.userName,
          "password" : this.userInfo.password
        };

        //执行另一套登录操作
        //不是本系统的用户,去J平台登陆去
        this.$store.dispatch("LoginSso", loginInfo).then(() => {
     
          this.$message.success("登录成功");
          this.loading = false;

          //   //处理登录        下面的path根据自己的需要去写
            this.$router.push({
     path: '/cggl/index'}).catch(() => {
     
<think>好的,我需要帮助用户实现泛微OA第三方系统单点登录(SSO)集成。首先,我需要理解用户的需求。用户想通过泛微OA实现第三方系统的SSO,这样用户登录一次就可以访问两个系统,无需重复输入凭证。 接下来,我要回忆一下单点登录的常见方法,比如CAS、OAuth、SAML等。但用户提到的是泛微OA,所以可能需要特定的集成方式。根据用户提供的引用,特别是引用[1][2],里面提到了部署专用集成接口文件配置过滤器,这可能涉及到在泛微OA中设置特定的过滤器或修改配置文件。 引用[1]提到需要部署e-cology专用集成接口文件,这可能是一个定制化的组件,用于处理SSO的请求。引用[2]中的SSO4InvokeContextFilter可能是一个过滤器,用于拦截请求并进行身份验证。此外,引用[3]虽然主要讲文件上传,但可能涉及到系统间通信的配置,比如Spring Boot中的设置,这可能与第三方系统的后端配置有关。 接下来,我应该整理步骤。首先,用户需要在泛微OA中部署专用接口文件,可能涉及将文件放置在特定的目录下,比如WEB-INF下。然后,配置web.xml文件,添加过滤器,并设置相关参数,如单点登录的URL密钥。同第三方系统需要生成令牌,并与OA系统共享密钥,以验证令牌的有效性。 需要注意的是,不同版本的泛微OA可能有不同的配置方法,所以用户需要根据实际版本调整步骤。此外,测试环节很重要,用户需要验证登录流程,确保跳转令牌传递正常,避免安全漏洞,比如使用HTTPS定期更换密钥。 最后,用户可能遇到问题,比如配置错误或版本不兼容,需要检查日志或联系技术支持。总结这些步骤,确保逻辑清晰,用户能一步步跟随操作。</think>### 如何通过泛微OA实现第三方系统单点登录(SSO)配置 以下是基于泛微OA实现SSO的典型配置步骤: #### 1. **部署集成接口文件** - 在泛微OA系统中部署专用的SSO集成接口文件(如`SSOFilter.jar`或自定义的JAR包),通常需要将文件放入Web应用的`WEB-INF/lib`目录下[^1][^2]。 - 修改泛微OA的`web.xml`配置文件,添加SSO相关的过滤器(Filter),例如: ```xml <filter> <filter-name>SSO4InvokeContextFilter</filter-name> <filter-class>com.weaver.sso.SSOFilter</filter-class> </filter> <filter-mapping> <filter-name>SSO4InvokeContextFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 此配置用于拦截请求并验证SSO令牌[^2]。 #### 2. **配置SSO参数** - 在泛微OA的配置文件中(如`ecology.properties`)添加第三方系统的认证参数,例如: ``` sso.enable=true sso.login.url=http://third-party-system/sso/login sso.secret.key=shared_encryption_key ``` - 密钥(`sso.secret.key`)需与第三方系统保持一致,用于加密/解密令牌。 #### 3. **第三方系统集成** - 第三方系统实现以下逻辑: 1. 用户访问,检查是否携带有效令牌。 2. 若未登录,跳转至泛微OA的SSO登录地址(如`http://oa-server/sso/login?redirect_url=xxx`)。 3. 泛微OA验证用户身份后,生成加密令牌并重定向回第三方系统。 4. 第三方系统解密令牌,验证有效性后建立本地会话[^3]。 #### 4. **令牌生成与验证** - 使用对称加密算法(如AES)生成令牌,例如: $$ \text{Token} = \text{Encrypt}(\text{用户名} + \text{间戳}, \text{密钥}) $$ - 第三方系统解密后需校验间戳的效性(如5分钟内有效)[^3]。 #### 5. **测试与验证** - 通过日志排查SSO流程中的错误(如泛微OA的`ecology.log`)。 - 使用工具(如Postman)模拟令牌传递过程,确保参数一致性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值