# supOS **Repository Path**: rapid_framework/host-app-help ## Basic Information - **Project Name**: supOS - **Description**: No description available - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-07-25 - **Last Updated**: 2025-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hostApp 对接supOS OAuth开发手册 ---------- ## 背景 合作伙伴系统通过iFreame页面嵌入的方式,集成到supOS工业互联网操作系统中。用户登录supOS系统后,点击菜单就可以直接进入合作伙伴的原型系统。 在这个过程之前需要合作伙伴将原型系统中的所有用户初始化导入到supOS中,并且实现supOS提供的OAuth2.0授权认证接口,双方系统校验用户的合法性后,方可进入原型系统的业务界面,并使用。 本文主要描述的是合作伙伴如何同步用户和实现OAuth2.0授权认证接口的说明。 ## 示例项目 开源系统:jeewms gitee地址:[https://gitee.com/erzhongxmu/jeewms](https://gitee.com/erzhongxmu/jeewms) ## OAuth2.0授权码模式集成单点登录 ### 时序图 ![](images/sxt.png) ### 集成过程 在集成之前,开发者可以获取到supOS系统的《OAuth 2.0授权说明》文档,本文通过WMS系统为例进行集成说明 通常BS架构的系统后端都有一个接收请求的总入口,可能是Filter,或者是Spring的AOP, ![](images/1.png) 1. 从cookie获取sessionId 2. 判断sessionId是否为空 3. 如果为空,通过HttpServletResponse 并且生成sessionId到Cookie中。设置http头Location,回调地址调用oauth2获得授权码接口地址,返回状态码302。 4. 重新回调到原型系统,这时sessionId已经有值,从HttpServletRequest的查询字符串中获取“code”这个code就是accessCode。 5. 再通过accessCode获取accessToken,得到当前supOS用户的登录token。 6. 调用openapi接口,通过accessToken获得当前supOS用户的username。 7. 根据username对比原型系统的用户,判断用户是否存在、权限等。 8. 如通过验证则展示原型系统业务页面。 ### 本地测试集成效果 登录supOS系统后,点击左侧菜单栏后,自己就可以进入到WMS系统的首页,中间过程进行了OAuth2.0的授权操作。 ![](images/xg.png) ## APP 上架和调试 ### 通过APP打包maven插件 详情可下载插件包和里面的README文档: [supOS APP打包插件](https://gitee.com/supos-help/host-app-help/raw/master/supos-app-maven-plugin.zip) ## k8s环境 web应用连接容器中的数据库 目前supOS版本只支持“无状态”的APP,如果APP需要引用数据库则需要手动在k8s环境上部署并初始化。 ## 实现步骤 ### 1.先编写mysql-deployment.yaml 脚本 ``` apiVersion: apps/v1 // 描述RC对象的版本是v1 kind: Deployment // 声明Deployment对象 metadata: name: mysql-deployment // metadata中的是对此对象的描述信息 spec: // spec中是对资源对象的具体描述 replicas: 1 // 创建1个副本 selector: // 选择器,用来选择对象的 matchLabels: app: mysql template: // 以下用来描述创建的pod的模版 metadata: labels: // 给以下打上标签,以供selector来选择 app: mysql spec: // 对pod模版的具体描述 containers: // 放入pod模版中的容器 - name: mysql // 容器名称 image: registry.supos.ai/dotnetcore/mysql:5.7 //镜像 ports: - containerPort: 3306 //镜像端口 env: - name: MYSQL_ROOT_PASSWORD //mysql环境变量 value: "123456" ``` ### 2. 编写 mysql-service.yaml 映射端口 我们需要创建对应的service的yaml文件。其中的重点在于三个端口的区别,容器有端口,Service有端口,node也有真实的端口号。因此需要注意定义type=NodePort,并有对应的nodeport端口号,以便集群外访问该服务。 ``` apiVersion: v1 kind: Service metadata: name: mysql labels: name: mysql spec: type: NodePort ports: - port: 3307 protocol: TCP targetPort: 3307 name: http nodePort: 30306 selector: name: mysql ``` ### 3. 通过命令创建deployment和service `kubectl create -f mysql-deployment.yaml ` `kubectl create -f mysql-service.yaml` ### 常用查看命令 #### 查看副本集replicaSet `kubectl get rs -n namespace` ![](images/getrs.png) #### 查看pod `kubectl get pod -n namepace` ![](images/getpod.png) #### 查看service `kubectl get svc -n namepace` ![](images/getsvc.png) #### 查看资源的详细信息 `kubectl describe pod {pod_name}` ![](images/getdesc.png) 这里可以看到部署的mysql对应的节点机IP ### 在Web应用中配置数据库 要使用 刚才通过获取资源详细信息得到的IP + 容器端口的形式 ![](images/jdbc.png) 最后,登录supOS平台,在APP管理中,点击启动APP,就可以连上容器里的数据库了。