博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
系统集成方案(一).NET集成方案
阅读量:6501 次
发布时间:2019-06-24

本文共 4815 字,大约阅读时间需要 16 分钟。

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,如需转载请自行联系原作者

你可能感兴趣的文章
rp2833 网卡以及串口与接插件位置关系
查看>>
简历浅析
查看>>
iostat
查看>>
MyBatis入门
查看>>
【LVM】LVM自动扩容脚本
查看>>
ogre场景图与场景内容分离
查看>>
《分析服务从入门到精通读书笔记》第一章、代理键和渐变维度(5)
查看>>
ArchLinux安装笔记(续)(桌面篇)
查看>>
中断小笔记
查看>>
C#委托、事件、消息(入门级)
查看>>
python设置windows桌面壁纸
查看>>
Visual Studio 11 Beta新特性(一):安装VS11
查看>>
通信常用概念
查看>>
Oracle.start with … connect by [… and] prior…order siblings by …
查看>>
PreferenceFragment 使用 小结
查看>>
stringstream 使用方法
查看>>
FreeBinary 格式说明
查看>>
oracle相关链接
查看>>
有关奇葩的mex编程时的matlab出现栈内存错误的问题
查看>>
表的复制——sql语句
查看>>