一:场景描述

用户有自己的门户系统A,希望将FineBI系统里面已经做好的模板直接挂载到A系统上面,使得用户可以通过一个入口查看。最终效果:登录A系统账号的同时也可以登录BI系统对应的用户账号,使得访问BI模板的时候不需要重复登录,并且BI系统设置的权限可以继承。

二:适用问题

三:实现方案

1、用户同步数据集

2、单点登录

3、iframe模板嵌入

四、操作步骤

1、首先写一个简单的用户系统A的界面模拟用户系统,模拟用户登录自己的系统看到自己的内容,使用MVC三层架构,在数据库创建相关的表finebi_user

用户系统A源码:

login.jsp:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body><form action="LoginServlet" method="post">用户名:<input type="text" name="uname"><br/>密码:<input type="password" name="upwd" ><br/><input type="submit" value="登录"></form>
</body>
</html>

loginfail.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>提示</title>
</head>
<body>用户名和密码不匹配!
</body>
</html>

Welcome.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>提示</title></head>
<body>登录成功!这里展示用户系统A的内容
</body>
</html>

LoginDao.java

package org.tyd.Dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import org.tyd.entity.Login;//模型层:处理登录,用于查询数据库
public class LoginDao {public static int login(Login login){//登录//boolean flag = false;登录成功与否的标志int flag =-1;//-1:系统异常   0:用户名或者密码有误  1:登录成功int result=-1;Connection connection = null;PreparedStatement pstmt =null;ResultSet rs=null;try {Class.forName("com.mysql.jdbc.Driver");connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/finebi","root","tyd123");String sql ="select count(*) from finebi_user where uname=? and upwd=?";pstmt = connection.prepareStatement(sql);pstmt.setString(1, login.getUname());pstmt.setString(2, login.getUpwd());rs=pstmt.executeQuery();if(rs.next()){result=rs.getInt(1);}if(result>0){return 1;  //登录成功}else{return 0;//登录失败(用户名或密码有误)}} catch (ClassNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();return -1;//登录失败(系统异常!)} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();return -1;//登录失败(系统异常!)}catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();return -1;//登录失败(系统异常!)}finally{    try {if(null!=rs) rs.close();if(null!=pstmt) pstmt.close();if(null!=connection) connection.close();} catch (SQLException e) {e.printStackTrace();}catch (Exception e) {e.printStackTrace();}}}
}

Login.java

package org.tyd.Dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import org.tyd.entity.Login;//模型层:处理登录,用于查询数据库
public class LoginDao {public static int login(Login login){//登录//boolean flag = false;登录成功与否的标志int flag =-1;//-1:系统异常   0:用户名或者密码有误  1:登录成功int result=-1;Connection connection = null;PreparedStatement pstmt =null;ResultSet rs=null;try {Class.forName("com.mysql.jdbc.Driver");connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/finebi","root","tyd123");String sql ="select count(*) from finebi_user where uname=? and upwd=?";pstmt = connection.prepareStatement(sql);pstmt.setString(1, login.getUname());pstmt.setString(2, login.getUpwd());rs=pstmt.executeQuery();if(rs.next()){result=rs.getInt(1);}if(result>0){return 1;  //登录成功}else{return 0;//登录失败(用户名或密码有误)}} catch (ClassNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();return -1;//登录失败(系统异常!)} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();return -1;//登录失败(系统异常!)}catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();return -1;//登录失败(系统异常!)}finally{    try {if(null!=rs) rs.close();if(null!=pstmt) pstmt.close();if(null!=connection) connection.close();} catch (SQLException e) {e.printStackTrace();}catch (Exception e) {e.printStackTrace();}}}
}

LoginServlet.java

package org.tyd.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.tyd.Dao.LoginDao;
import org.tyd.entity.Login;//控制器层:接受view请求,并分发给model处理
public class LoginServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理登录request.setCharacterEncoding("UTF-8");String name =request.getParameter("uname");String pwd=request.getParameter("upwd");Login login=new Login(name,pwd);//用户名和密码//调用模型层的登录功能,即LoginDaoint result=LoginDao.login(login);if(result>0){//登录成功response.sendRedirect("Welcome.jsp");}else {//重定向到登陆失败的页面response.sendRedirect("loginfail.jsp");}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

2、测试:

将工程添加到服务器中,启动服务器,浏览器输入http://localhost:8080/MVCSample/login.jsp进入登录页面

输入数据库账号密码,如果成功则返回到Welcome.jsp页面,若是数据库不存在账号密码则返回loginfail.jsp页面

成功测试:

失败测试:

3、同步用户数据集。BI连接刚刚建立的数据库,FR设计器远程连接BI,创建服务器数据集,并且导入数据库中的用户

4、单点登陆

使用iframe单点登陆,将doSubmit()方法嵌入到用户系统A的登录页面中

iframe单点登录:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<script type="text/javascript">function doSubmit() {     var username = document.getElementById("uname").value; //获取输入的用户名var password = document.getElementById("upwd").value;  //获取输入的参数var scr = document.createElement("iframe");      //创建iframe   scr.src = "http://localhost:37799/webroot/decision/login/cross/domain?fine_username=" + username + "&fine_password=" + password + "&validity=" + -1 + "&callback=callback";   //将报表验证用户名密码的地址指向此iframeif (scr.attachEvent){       //判断是否为ie浏览器 scr.attachEvent("onload", function(){                    //如果为ie浏览器则页面加载完成后立即执行 window.location="http://localhost:37799/webroot/decision"; //直接跳转到数据决策系统}); } else { scr.onload = function(){              //其他浏览器则重新加载onload事件 /*跳转到指定登录成功页面,index.jsp var f = document.getElementById("login"); f.submit();  */window.location="http://localhost:37799/webroot/decision"; //直接跳转到数据决策系统}; } document.getElementsByTagName("head")[0].appendChild(scr);   //将iframe标签嵌入到head中   }  </script>
<title>登录</title>
</head>
<body><form id="login" action="LoginServlet" method="post" >用户名:<input id="uname" type="text" name="uname"><br/>密码:<input id="upwd" type="password" name="upwd" ><br/><input type="button" value="登录" onClick="doSubmit()" /></form>
</body>
</html>

5、创建相应的模板

场景:创建工资模板,例如工资条,建立后对用户进行权限分配,使得工资条的username属于登录者信息中用户表--的username,让不同的用户登录系统A的时候可以同时登录BI系统,并且只能查看自己自己的工资条的部分,无法查看其他人的工资条

 

工资条建立相应的仪表板,并且挂出在目录下,给用户分配相应的数据包和目录的查看权限

6、用户登录自己的系统进行模板查看

BI模板挂载到外部系统相关推荐

  1. 套用bi模板,轻松搞定各类数据分析报表

    bi模板是什么?是一个个提前预设的报表设计,套用后立即生效,轻轻松松搞定bi数据可视化分析报表.bi模板都有哪些类型?怎么套用?以奥威bi数据可视化软件为例,聊聊bi模板的种类和下载使用. bi模板有 ...

  2. 嵌入式linux 分区挂载,嵌入式linux系统的开发——文件系统的分区和挂载

    前言 当我们新买的硬盘安装在电脑上后,必须要对硬盘分区和文件系统格式化后才能使操作系统能够在分区内正常读写和保存文件.所谓分区即是将硬盘划分为多个空间范围,我们可以在不同的分区内存放不同的文件以便于管 ...

  3. sap与外部系统的接口怎么实现

    根据系统数据交换的方式以及读写数据的相对关系不同,可以将外部系统与SAP系统的接口形式分为:主动式,被动式和中间式1.主动式接口即外部系统将SAP系统所需的信息直接写入SAP系统的数据库中.这种方式要 ...

  4. SAP系统中在发布了webservice,获得了WSDN地址后,外部系统怎么传数据到SAP?

    SAP系统中在发布了webservice,获得了WSDN地址后,外部系统怎么传数据到SAP? 你是先创建了rfc,然后根据rfc发布的webservice吧? rfc里不是订了传入传出参数,那生成的w ...

  5. SAP系统与外部系统的三种接口形式

    SAP系统之所以能成为ERP产品的代名词,不仅仅是因为SAP系统己经集成了当今世界最强大的管理功能和最优秀的业务流程,也是因为SAP系统提供了一个功能较为完善的开放的开发平台,它提供的开发接口使得SA ...

  6. 商品库存推送至外部系统API接口文档

    没有与外部系统对接,商品库存数据不通?往下看看 电商API文档---点击查看!http://ds.xnxxxk.cn/apijk?comefrom=CSDN&plan=kucuntongbu1 ...

  7. 可视化BI模板分享:运营相关模板,知乎已获千赞

    做运营的小伙伴还是很多的, 今天给大家分享一下我最近这段时间独立完成的BI模板 可视化报告能帮助业务端清楚地向管理层呈现自己的工作 也方便各位小伙伴认知到自己工作上的不足, 及时做出调整, 还是非常有 ...

  8. 【修复版】仿我爱看电影网站模板/海洋CMS影视系统模板

    仿我爱看电影网站模板,海洋CMS影视系统模板.海洋CMS我爱看电影网站模板,这款为修复版, 原版有许多小BUG,搞了大半天,能修复的都修复了,基本没有任何问题了. 已测试下面为测试图,大家可以看看. ...

  9. AWS Route 53里使用外部系统的域名

    目录 背景 操作 1.创建托管 2.查看NS记录值 3.将记录值复制到DNS管理 遇到的问题 参考 背景 我是使用CloudFront + Route 53,服务器等都在AWS,按照AWS的文档需要使 ...

最新文章

  1. vue 编写H5页面在公众号外部获取手机本地坐标经纬度
  2. suse linux不能识别u盘,SUSE Linux mount u盘
  3. RAID磁盘阵列的原理与搭建
  4. SAP Cloud Platform integration上创建一个最简单的iFlow
  5. C - 思考使用差分简化区间操作
  6. ap设置 维盟660g_New丨维盟双频百兆11ac入墙AP:WAP-3018穿墙效果不一样!
  7. mysql用户授权开发者_Mysql添加用户与授权
  8. XML:DTD:Schema
  9. 精通 Pandas · 翻译完成
  10. 又一主播逃税被罚!快手主播“驴嫂平荣”被追缴并罚款6200.3万元
  11. html在线布局,HTML 布局
  12. HOJ 2275 Number sequence
  13. 根据自身工作经验总结的一个工作问题解决思路
  14. 码云推出企业 Git 和项目管理现场培训服务
  15. GD32芯片包下载和安装教程
  16. 远程控制软件TeamViewer
  17. 推荐几个好用串口调试、检测的工具
  18. java编辑word文档,向word文档尾部添加图片
  19. 那些曾让我一脸懵逼的python代码
  20. 如何用r语言分析数据

热门文章

  1. Java 语言程序设计基础(笔记一) ( 专升本自考 ,九天速成 )
  2. CASS道路横断面线,如何折线变直线?
  3. 【OA办公】OA流程审批大揭秘,带你看遍所有基础流程
  4. redis进阶使用(三)—— Redis 集群
  5. 用友NC系统连接不到服务器,客户端连接不到服务器 _0
  6. JavaFX配置问题及解决措施:报错“缺少JavaFX组件”
  7. 互联网大会蓝皮书_世界互联网大会蓝皮书发布!有什么内容?中国发展水平怎么样?...
  8. Chrome 浏览器全球大翻车?让 20 多亿用户无网可上
  9. 树莓派循迹+图片识别(模板匹配)小车 C++
  10. 2020年低压电工复审模拟考试及低压电工作业模拟考试