系统集成方案(一).NET集成方案

简介:

NET系统集成有自己独立的登录验证方式。比如,跟报表集成时,不需要再使用报表内置的登录界面,只需要将报表默认的参数用户名fr_username和密码fr_password发送给报表系统,触发一下报表验证方式就可以实现单点登录了,以下用FineReport的.NET跨域单点登录案例简单介绍一下。

系统本身有独立的登录验证方式如下图:

 

1.触发报表验证方法

报表集成时不需要再一次进行登录验证,只需在项目里面的登录验证页面内触发一下报表方法,如下js方法:

1
2
3
4
5
6
7
8
function  doSubmit() {    
          varusername =document.getElementById( "username" ).value;   //此处是用来提取用户名和密码
          varpassword =document.getElementById( "userPwd" ).value;
         varscr = document.createElement( "iframe" );       //创建iframe  
          vardt= new  Date();
        scr.src = "/WebReport/ReportServer?op=fs_load&cmd=sso&username="  +username +  "&password="  +password+ "&time=" +dt.toString();   //将报表验证用户名密码的地址指向此iframe  
        document.getElementsByTagName( "head" )[0].appendChild(scr);    //将iframe标签嵌入到head中  
     }

注:此处的单点登录是登录报表管理平台,而不是FineReport的数据决策系统,如果需要与数据决策系统做单点登录,需将

1
2
3
scr.src =  "http://localhost:8075/WebReport/ReportServer?op=fs_load&cmd=sso&username=" + username +  "&password="  + password;
改成
scr.src =  "http://localhost:8075/WebReport/ReportServer?op=fs_load&cmd=sso&username=" + username +  "&password="  + password;

点击项目里面的登录按钮,跳到后台进行项目里面的验证,此报表的验证方式需要在页面前台内调用javascript的方式触发,这边类似定义了两个onclick事件,而.net不能同时触发两个onclick事件,所以先要触发完一个onclick事件后再触发另一个,考虑报表没有验证完.net项目就跳转的话,导致报表没有验证成功,所以点击登录按钮首先触发报表验证方法,其次再到.net后台进行验证。

3. 触发.net前台

触发前台报表验证方法,新建一个登录按钮,设置按钮OnClientClick属性为:OnClientClick="doSubmit();return false;",即触发前台doSubmit()方法,doSubmit()方法,首先把获取的用户名和密码的值,发送到报表系统,报表服务将带着这两个参数访问认证地址进行认证。而项目本身有个登录按钮是触发的项目后台的方法,我们这边首先触发报表前台再通过js的方式触发后台的那个登录按钮,所以这边需要把之前的登录按钮设置隐藏,属性为Style="display: none;"。

4. 触发.net后台

报表验证完再触发.net项目后台登录验证的方法,通过登录按钮ID为Button1,使用document.getElementById("Button1").click();触发登录按钮,但是每个浏览器执行的方式不同,所以这边需要判断一下,代码如下:

1
2
3
4
5
6
7
8
9
10
11
   if (scr.attachEvent){        //判断是否为ie浏览器  
               scr.attachEvent( "onload" function (){                     //如果为ie浏览器则页面加载完成后立即执行  
                   var  f = document.getElementById( "Button1" );  
                   f.click();  
               });  
            else  {  
               scr.onload =  function (){              //其他浏览器则重新加载onload事件  
                    var  f = document.getElementById( "Button1" );  
                    f.click();  
               };  
          }

下面以简单的登录验证页面login.aspx为例head中调用javascript

示例

1、登录前台页面

以简单的登录验证页面login.aspx为例,head中调用javascript触发报表方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<%@ Page Language= "C#" AutoEventWireup= "true"  CodeFile= "login.aspx.cs" Inherits= "login"  %>
  
<!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
  
<htmlxmlns= "http://www.w3.org/1999/xhtml"  >
<head runat= "server" >
    <title>无标题页</title>
   <scripttype= "text/javascript"  language= "javascript" >  
       function  doSubmit() {    
          varusername =document.getElementById( "username" ).value;   //此处是用来提取用户名和密码
          varpassword =document.getElementById( "userPwd" ).value;
         varscr = document.createElement( "iframe" );       //创建iframe  
          vardt= new  Date();
         scr.src=  "/WebReport/ReportServer?op=fs_load&cmd=sso&username="  +username +  "&password="  +password+ "&time=" +dt.toString();   //将报表验证用户名密码的地址指向此iframe  
         if (scr.attachEvent){        //判断是否为ie浏览器  
               scr.attachEvent( "onload" function (){                     //如果为ie浏览器则页面加载完成后立即执行  
                   var  f = document.getElementById( "Button1" );  
                   f.click();  
               });  
            else  {  
               scr.onload =  function (){              //其他浏览器则重新加载onload事件  
                    var  f = document.getElementById( "Button1" );  
                    f.click();  
               };  
         }  
        document.getElementsByTagName( "head" )[0].appendChild(scr);    //将iframe标签嵌入到head中  
    
  </script>
</head>
<body>
     <formid= "form1"  runat= "server" >
    <div>
        <asp:TextBox ID= "username"  runat= "server" Style= "z-index: 100; left: 156px; position: absolute;
            top: 42px" ></asp:TextBox>
        <asp:TextBox ID= "userPwd"  runat= "server" Style= "z-index: 101; left: 157px; position: absolute;
            top: 91px" ></asp:TextBox>
        <asp:Label ID= "Label1"  runat= "server" Height= "22px"  Style= "z-index: 102; left: 76px;
            position: absolute; top: 46px"  Text= "用户名:"  Width= "77px" ></asp:Label>
        <asp:Label ID= "Label2"  runat= "server" Style= "z-index: 103; left: 80px; position: absolute;
            top: 88px"  Text= "密码:" Width= "64px" ></asp:Label>
        <asp:Button ID= "Button1"  runat= "server"   Style= "z-index: 104; display:none;
            left: 84px; position: absolute; top: 132px"  Text= "登录"  Width= "66px"  />
        <asp:Button ID= "Button2"  runat= "server" OnClientClick= "doSubmit();return false;"
            Style= "z-index: 106; left: 178px; position: absolute; top:133px"  Text= "登录"  Width= "100px"  />
     
    </div>
    </form>
</body>
</html>

前台和后台验证成功之后,单点登录页面就设计完成了。

报表工具是通过url传用户名和密码进行验证,传到报表服务器是以session的方式保存,防止被人中途拦截会导致系统泄密,可以对登录进来的密码进行加密,或者使用https证书,让请求在传输过程中加密,配置方法也很简单。这种方式还存在一个证书合法性问题,用自己生成的证书,客户端在访问报表中浏览器会显示证书非法警告,所以需要去购买合法证书。目前国内最便宜的证书一年是一千多元。

2、平台设置

一般情况下报表集成到.net系统,首先登录访问.net的项目,所以自定义登录页面访问地址可以不需要设置,如果没有登录到.ne项目,先访问我们的报表了,而这时访问报表的登录页面是报表内置的登录界面,需使用自动登录页面地址为您系统的登录地址,操作如下:

打开http://localhost/WebReport/ReportServer?op=fr_platform,FR管理平台,选择权限配置>登录设置,自定义登录页面访问地址上,输入自己的登录页面路径http://localhost/FRtest/login.aspx,如下图所示:



本文转自 雄霸天下啦 51CTO博客,原文链接:http://blog.51cto.com/10549520/1830559,如需转载请自行联系原作者

相关文章
|
3月前
|
机器学习/深度学习 算法 物联网
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
本文提出一种面向能效与低延迟的离线语音控制智能家居方案,通过将关键词识别(KWS)集成至终端设备,结合去中心化Mesh网络与CoAP协议,实现本地化语音处理。相较云端方案,系统能耗降低98%,延迟减少75%以上,显著提升响应速度与能源效率,为绿色智能家居提供可行路径。(236字)
310 17
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
编解码 算法 vr&ar
298 0
|
4月前
|
自然语言处理 负载均衡 算法
推理速度提升300%:LLaMA4-MoE的FlashAttention-2集成与量化部署方案
本文详解LLaMA4-MoE模型架构与实现全流程,涵盖语料预处理、MoE核心技术、模型搭建、训练优化及推理策略,并提供完整代码与技术文档,助你掌握大模型MoE技术原理与落地实践。
318 6
|
5月前
|
缓存 人工智能 监控
MCP资源管理深度实践:动态数据源集成方案
作为一名深耕AI技术领域多年的开发者,我见证了从传统API集成到现代化协议标准的演进历程。今天要和大家分享的MCP(Model Context Protocol)资源管理实践,是我在实际项目中积累的宝贵经验。MCP作为Anthropic推出的革命性AI连接标准,其资源管理机制为我们提供了前所未有的灵活性和扩展性。在过去的几个月里,我深度参与了多个企业级MCP项目的架构设计和实施,从最初的概念验证到生产环境的大规模部署,每一个环节都让我对MCP资源管理有了更深刻的理解。本文将从资源生命周期管理的角度出发,详细探讨文件系统、数据库、API等多种数据源的适配策略,深入分析实时数据更新与缓存的最佳实践
212 0
|
5月前
|
人工智能 安全 API
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
作为一名长期关注AI技术发展的博主摘星,我深刻感受到了当前AI应用集成领域正在经历的巨大变革。随着Anthropic推出的Model Context Protocol(MCP,模型上下文协议)逐渐成熟,我们不得不重新审视传统的系统集成方案。在过去的几年中,REST API凭借其简单易用的特性成为了Web服务的标准选择,GraphQL以其灵活的数据查询能力赢得了前端开发者的青睐,而gRPC则以其高性能的特点在微服务架构中占据了重要地位。然而,当我们将视角转向AI应用场景时,这些传统方案都暴露出了一些局限性:REST API的静态接口设计难以适应AI模型的动态需求,GraphQL的复杂查询机制在处
400 0
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
|
5月前
|
JSON API 开发者
Django集成Swagger全指南:两种实用方案详解
本文介绍了在 Django 项目中集成 Swagger 的两种主流方案 —— drf-yasg 和 drf-spectacular,涵盖安装配置、效果展示及高级用法,助力开发者高效构建交互式 API 文档系统,提升前后端协作效率。
241 5
|
6月前
|
存储 Kubernetes 监控
Docker与Kubernetes集成挑战及方案
面对这些挑战,并不存在一键解决方案。如同搭建灌溉系统需要考虑多种因素,集成Docker与Kubernetes也需要深思熟虑的规划、相当的技术知识和不断的调试。只有这样,才能建立起一个稳定、健康、高效的Docker-Kubernetes生态,让你的应用像花园中的植物一样繁荣生长。
319 63
|
8月前
|
数据采集 自然语言处理 JavaScript
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
随着数据采集需求的增加,传统爬虫工具如Selenium、Jsoup等因语言割裂、JS渲染困难及代理兼容性差等问题,难以满足现代网站抓取需求。微软推出的Playwright框架,凭借多语言支持(Python/Java/.NET/Node.js)、统一API接口和优异的JS兼容性,解决了跨语言协作、动态页面解析和身份伪装等痛点。其性能优于Selenium与Puppeteer,在学术数据库(如Scopus)抓取中表现出色。行业应用广泛,涵盖高校科研、大型数据公司及AI初创团队,助力构建高效稳定的爬虫系统。
467 2
Playwright多语言生态:跨Python/Java/.NET的统一采集方案
|
9月前
|
人工智能 BI API
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
Dify-Plus 是基于 Dify 二次开发的企业级增强版项目,新增用户额度、密钥管理、Web 登录鉴权等功能,优化权限管理,适合企业场景使用。
1403 3
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
631 12

热门文章

最新文章