iPortal 注册登录模块扩展开发

news2024/10/11 8:32:01

作者:yx

文章目录

  • 前言
  • 一、示例代码简介
  • 二、对接 iPortal REST API 接口
    • 2.1、登录模块扩展开发
    • 2.2、注册模块扩展开发
  • 三、页面内容及样式实现
  • 四、配置启用定制页面


前言

针对注册登录模块,iPortal 允许用户通过 iFrame 方式接入自行开发的页面,对注册与登录页面的元素与样式进行完全的重写,以实现高度自由化的定制。

扩展开发 iPortal 注册登录模块的流程一般包括:对接 iPortal REST API 接口、页面内容及样式实现、配置启用定制页面等。iPortal 产品包中提供了一套简单的示例代码(位于 %SuperMap iPortal_HOME%\webapps\iportal\resources\web-ui\extend\login 目录下)以指导您如何进行注册与登录页面的扩展开发。

一、示例代码简介

示例代码的结构如下图:

其中 login.html、register.html 为定制的 HTML 页面,config.json 为扩展开发配置文件(该文件为必须文件,且不可更名),js 文件夹内为对接 iPortal 注册登录与重置密码相关 API 的 JavaScript 文件。
注意:
1、下文中示例代码中的 rootUrl 均指 http://{ip}/{port}/{contextPath}/(例:http://127.0.0.1:8190/iportal/),定义方式可以参考:

var index = window.location.href.indexOf('resources');
var rootUrl = window.location.href.slice(0,index).replace(window.location.origin,'');

2、由于定制的页面是通过 iFrame 的方式引入的,因此定制页面的 window.parent 对象所对应的是 web-ui 页面中的 window 对象。如果您需要在登录、注册两个页面间进行切换,可以调用 window.parent.changeRoute(param) 方法,其中 param的值为“login”/“register”。

二、对接 iPortal REST API 接口

iPortal 提供了门户全功能的 REST API 接口,将门户功能以资源的形式提供给客户端,您可以调用注册与登录相关的 REST API 以实现定制开发的页面与 iPortal 后端的交互,下面分别介绍登录、注册两个模块涉及的 REST API 及具体使用方法。

2.1、登录模块扩展开发

对接 iPortal 登录接口 login(http://{ip}:{port}/iportal/web/login.json),通过发送 POST 请求,在请求体中携带用户名和密码,可以登录 iPortal。login 接口的具体请求参数请参阅 REST API:login
iPortal 示范代码(SuperMap iPortal_HOME%\webapps\iportal\resources\web-ui\login\js 目录下的 index.js 文件)中定义了 login 登录方法,用于获取用户输入的账号与密码并向 iPortal 发送登录请求,iPortal 返回登录成功或失败信息,登录成功则返回首页。以下为 index.js 文件中与登录模块相关的代码:

function login(name, pass) {
    var url = rootUrl + 'web/login.json';
    var param = {
        username: $(".login_name").val(),
        password: $(".login_password").val(),
        rememberme: $(".login_remember").is(':checked')
    };
    if (name && pass) {
        param.username = name;
        param.password = pass;
    }
    $.ajax({
        type : "POST",
        url : url,
        data : JSON.stringify(param),
        dataType: 'json',
        success: function(result) {
            console.log(result);
            if ( result.succeed ) {
                window.parent.open(rootUrl + "web-ui/home", "_self");
            } else {
                alert("登录失败!");
            }
        },
        error: function () {
            alert("登录失败!");
        }
    });
}

2.2、注册模块扩展开发

第一步(可选):如果您对注册功能有一些限制,如需要在用户注册时填写部门、邮箱等信息,可以从门户配置接口 portalConfig(http:// {ip}:{port}/iportal/web/config/portal.json)的响应中获取到是否开启了相关的注册配置,具体可参阅 REST API:portalConfig
若开启了注册时选择部门的功能,则还需要发送 departments 请求(http://{ip}:{port}/iportal/manager/iportalconfig/departments.json)获取 iPortal 的所有部门信息,具体可参阅 REST API:departments。如果您对注册功能无限制,可以跳过此步骤。
第二步: 对接 iPortal 注册的相关接口,具体包括:

  • 注册新用户接口 users(http://{ip}:{port}/iportal/web/users.json),向 users 接口发送 POST 请求可以注册一个新用户,user 接口的请求参数及响应体请参阅 REST API:users
  • 验证用户名接口 isRegistered(http://{ip}:{port}/iportal/web/users/registered.json),iPortal 不允许用户名重复,向 isRegistered 接口发送 GET 请求可以获取输入的用户名是否已经被占用,isRegistered 接口的请求参数及响应体请参阅 REST API:isRegistered
  • 验证昵称接口 isNickRegistered(http://{ip}:{port}/iportal/web/users/nickname/isregistered.json),iPortal 不允许用户昵称重复,向 isNickRegistered 接口发送 GET 请求可以获取输入的昵称是否已经被占用,isRegistered 接口的请求参数及响应体请参阅 REST API:isNickRegistered

iPortal 示范代码(SuperMap iPortal_HOME%\webapps\iportal\resources\web-ui\login\js 目录下的 index.js 文件)中定义了 sign_up 注册方法,记录用户在注册界面输入的信息并验证其合法性,验证通过后向 iPortal 发送注册用户请求,iPortal 返回注册成功或失败信息。

三、页面内容及样式实现

示例代码中 login.html、register.html、resetPwd.html 文件为自定义开发的页面范例,采用 HTML+JavaScript+CSS 技术栈实现,包含了注册、登录、重置密码页面所需的最基本元素。这里以登录页面为例:

<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>登录示例</title>
</head>
<body bgcolor="#ffffff">
<div class="login">
  <h2>LOGIN</h2>
  <input type="name" placeholder="Name" class="login_name"/>
  <input type="password" placeholder="Password" class="login_password"/>
  <span class="reset">
    <input type="checkbox" class="login_remember"/>Remember Me
    <a href="javascript:void(0)" class="openResetPwd" onclick="openResetPwdPage()">Forgot Password?</a>
  </span><br/>
  <button class="btn_login" onClick="login()">LOGIN</button>
</div>
<script src="js/jquery-3.4.1.min.js"></script>
<script src="js/index.js"></script>
<style>
    .login {
        margin: 100px auto;
        width: 280px;
        height: 400px;
        }
    h2{
        text-align: center;
        }
    .login > input{
        width: 280px;
        height: 30px;
        margin-bottom: 20px; 
        }
    .reset{
        display: inline-block; 
        width: 280px;
        margin-bottom: 20px;
        font-size: 14px;
        text-align: left
        }
    .reset > a{
        display: inline-block;
        float: right;
        color: #000;
        cursor: pointer;
        }
    .btn_login {
        width: 285px;
        height: 35px;
        }
</style>
</body>
</html>

其中 login_name、login_password、login_remember、openResetPwdPage()、login() 等 id 与方法名需要与上述2.1小节“登录模块扩展开发”中定义的名称保持一致。 为 JavaScript 文件的路径。
效果如下图:
在这里插入图片描述
以上作为入门教程,页面元素与样式相对简单。由于 iPortal 是以 iFrame 形式引入扩展页面,因此您完全可以使用更丰富的前端技术栈与可视化库来定制专属页面。

四、配置启用定制页面

在您开发完成注册登录以及重置密码页面的定制开发后,还需修改 %SuperMap iPortal_HOME%\webapps\iportal\resources\web-ui\extend\login 目录下的 config.json 文件,将定制后的页面应用至 iPortal,config.js 代码如下:

{
  "enable": true,
  "extendType": "IFRAME",
  "loginUrl": "{portalRoot}/resources/web-ui/extend/login/login.html",
  "registerUrl": "{portalRoot}/resources/web-ui/extend/login/register.html"
}

参数介绍:

  • enable:是否使用用户扩展定制的登录注册及重置密码页面。默认值:false,使用 iPortal 内置的登录注册页面。使用用户扩展开发的页面时,需要将该值设置为:true。
  • extendType:扩展的方式,目前支持以 iFrame 形式扩展。
  • loginUrl:定制的登录页面路径。
  • registerUrl:定制的注册页面路径。

修改并保存上述配置后,即可在 iPortal 中使用定制开发的注册登录界面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb开发(后端Web开发【一】)

文章目录 前言一、Maven1.Maven概述-介绍1.1.Maven概述-介绍1.2.Maven概述-安装 2.IDEA集成Maven2.1.IDEA集成Maven-配置Maven环境2.2.IDEA集成Maven-创建Maven项目2.3.IDEA集成Maven-导入Maven项目 3.Maven-依赖管理3.1.Maven-依赖管理-依赖配置3.2.Maven-依赖管理-依赖传递3.…

Unity小游戏——怪物出现模式的管理

摘要&#xff1a;游戏启动后不久&#xff0c;画面前方将出现怪物&#xff0c;游戏的目标是不停地看到怪物并持续前进 一、怪物出现的时间节点 我们首先来看如何来确定怪物出现的间隔。 若是怪物相继出现的时间间隔很短&#xff0c;玩家就必须快速地点击按键&#xff0c;这样游…

目前新能源汽车充电桩的发展受到哪些不利因素的影响?

目前新能源汽车充电桩的发展受到哪些不利因素的影响? 一是安装难&#xff0c;很多老旧小区没有充电桩配套施工规范&#xff0c;充电桩建设比较难&#xff0c;受到充电容量不足电表箱供电等局限性的制约&#xff0c;同时缺乏充电桩配套设施的统一规划&#xff0c;小区内只能安装…

元学习(小样本)-基本概念

机器学习 概述 以分类任务为例&#xff0c;机器学习可以看作是找一个猫狗的分类函数。 step1: 设计未知函数&#xff1b;其中&#xff0c;权重和偏置都是神经元中位置参数&#xff08;可学习的&#xff09;&#xff1b;step2: 定义损失函数&#xff1b;step3&#xff1a;训练…

SpringBoot----(1)基础

目录 1 SpringBoot简介1.1 入门案例&#xff08;IDEA构建&#xff09;1.2 官网构建工程1.3 SpringBoot程序快速启动1.4 SpringBoot概述1.5 起步依赖1.6 程序启动1.7 切换web服务器 2 配置2.1 配置文件格式&#xff08;3种&#xff09;2.2 yaml格式2.3 yaml数据读取方式&#xf…

Maven-----进阶

目录 1 分模块开发1.1 分模块开发的意义1.2 分模块开发实现 2 依赖管理2.1 依赖传递2.2 依赖传递冲突问题2.3 可选依赖和排除依赖 3 继承与聚合3.1 聚合3.2 继承3.2 聚合与继承的区别 4 属性4.1 属性4.2 资源文件引用属性4.3 版本管理 5 多环境配置与使用5.1 多环境开发5.2 跳过…

【JavaSE】类和对象的封装

目录 【1】封装 【1.1】封装的概念 【1.2】访问限定符 【1.3】封装扩展之包 【1.3.1】包的概念 【1.3.2】导入包中的类 【1.3.3】自定义包 【1.3.4】包的访问权限控制举例 【1.3.5】常见的包 【2】static成员 【2.1】再谈学生类 【2.2】static修饰成员变量 【2.3】…

量子力学的应用:量子计算

亲爱的读者&#xff0c; 欢迎回到我们的量子力学系列文章。在前面的几篇文章中&#xff0c;我们已经深入探讨了量子力学的起源、基本概念、实验验证以及解释问题。今天&#xff0c;我们将聚焦在量子力学的一个引人注目的应用领域&#xff1a;量子计算。 1. 传统计算机与量子计…

【雕爷学编程】Arduino动手做(86)---4*4位 WS2812 全彩模块2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【图解CAN总线】-9-详述经典CAN和CANFD报文是如何收发的

目录 1 经典CAN/CANFD网络拓扑分解 2 CAN收发器“前后端的电平” 3 图解MCU芯片与CAN物理总线之间CAN报文收发过程 3.1 TX&#xff0c;RX和CAN H/L电平变化&#xff1a;ECU接收一个报文 3.2 TX&#xff0c;RX和CAN H/L电平变化&#xff1a;ECU发送一个报文 END 推荐阅读&…

【LeetCode】48.旋转图像

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]…

OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)

文章目录 1. OPC基础知识&#xff1a;OPCDA&#xff0c;OPCUA1.1 OPC基础知识1.2 OPC通信读写方式 2. OPC通信仿真2.1 上位机与PLC通过ModbusTCP直接通信2.2 OPC通信介绍及实例2.2.1 OPC通信与ModbusTCP比较2.2.2 OPC通信应用场景2.2.3 OPC DA通信仿真实例2.2.4 OPC UA通信仿真…

随手笔记——3D−3D:ICP理论

随手笔记——3D−3D&#xff1a;ICP理论 说明SVD 方法非线性优化方法 说明 ICP 的求解也分为两种方式&#xff1a;利用线性代数的求解&#xff08;主要是 SVD&#xff09;&#xff0c;以及利用非线性优化方式的求解&#xff08;类似于 Bundle Adjustment&#xff09;。 SVD 方…

Android平台GB28181设备接入模块之按需编码和双码流编码

技术背景 我们在做执法记录仪或指挥系统的时候&#xff0c;会遇到这样的情况&#xff0c;大多场景下&#xff0c;我们是不需要把设备端的数据&#xff0c;实时传给国标平台端的&#xff0c;默认只需要本地录像留底&#xff0c;如果指挥中心需要查看前端设备实时数据的时候&…

【LeetCode热题100】打卡第44天:倒数第30~25题

文章目录 【LeetCode热题100】打卡第44天&#xff1a;倒数第30~25题⛅前言 移动零&#x1f512;题目&#x1f511;题解 寻找重复数&#x1f512;题目&#x1f511;题解 二叉树的序列化与反序列化&#x1f512;题目&#x1f511;题解 最长递增子序列&#x1f512;题目&#x1f5…

力扣 763. 划分字母区间

题目来源&#xff1a;https://leetcode.cn/problems/partition-labels/description/ C题解1&#xff1a; 先遍历一遍使用哈希算法找到每个小写字母的最远的索引&#xff0c;再遍历一次&#xff0c;不断更新每个片段的最远距离。 class Solution { public:vector<int> pa…

Qt Core学习日记——第八天QMetaObject(下)

QMetaObject::normalizedType 将名称规范化。 例如&#xff1a; QByteArray normType QMetaObject::normalizedType(" int const *"); // normType is now "const int*" QMetaObject::connect(const QObject *sender, int signal_index, const QObject…

redis(12):springboot使用redis注解做缓存

1 新建springboot项目 2 相关注解 EnableCaching 在启动类上加上注解启动缓存 #作用在你要缓存的数据上 Cacheable(key"#id",cacheNames"com.sxt.service.impl.MenuServiceImpl") Cacheput 解决脏读 CachEvict&#xff08;解决脏读&#xff09; Cach…

01Mybatis报错日志 BindingException

01 Mybatis报错日志 BindingException Type interface com.zhnx.demo1.mapper.UserMapper is not known to the MapperRegistry. org.apache.ibatis.binding.BindingException: Type interface com.zhnx.demo1.mapper.UserMapper is not known to the MapperRegistry.at org…

腾讯云服务器公共镜像大全_Linux和Windows操作系统

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…