在一个项目中,需要使用单点登录,下面是我在结合通用权限管理系统做的一个登录程序,注意登录后本地服务器程序中没有使用session保存登录信息,使用的是FormsAuthentication。
  
   登陆页主要代码
 1     using DotNet.Business;
 2     using DotNet.Utilities;
 3     using Newtonsoft.Json;
 4     using ZTOTransferFees.Foundation;
 5     using ZTOTransferFees.WebSite.WebPermission;
 6     /// <summary>
 7     /// 登录页面
 8     ///
 9     /// <author>
10     ///     <name>SongBiao</name>
11     ///     <date>2014.03.09</date>
12     /// </author>
13     /// </summary>
14     public partial class Login : BasePage
15     {
16         /// <summary>
17         ///
18         /// </summary>
19         protected string act = string.Empty;
20         /// <summary>
21         /// 站点
22         /// </summary>
23         protected string sitename = string.Empty;
24         /// <summary>
25         /// 用户名
26         /// </summary>
27         protected string username = string.Empty;
28         /// <summary>
29         ///  密码
30         /// </summary>
31         protected string password = string.Empty;
32         protected void Page_Load(object sender, EventArgs e)
33         {
34             act = string.IsNullOrWhiteSpace(Request["act"]) || string.Equals(Request["act"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["act"].Trim();
35             if (!string.IsNullOrWhiteSpace(act) && string.Equals("login", Request["act"].Trim(), StringComparison.OrdinalIgnoreCase))
36             {
37                 Response.ContentType = "application/json";
38                 sitename = string.IsNullOrWhiteSpace(Request["sitename"]) || string.Equals(Request["sitename"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["sitename"].Trim();
39                 username = string.IsNullOrWhiteSpace(Request["username"]) || string.Equals(Request["username"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["username"].Trim();
40                 password = string.IsNullOrWhiteSpace(Request["password"]) || string.Equals(Request["password"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["password"].Trim();
41                 LoginResult loginResult = new LoginResult();
42                 BaseUserInfo userInfo = null;
43                 JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
44                if (!string.IsNullOrWhiteSpace(sitename) && !string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(password))
45                 {
46                     //webservice 方式访问
47                      PermissionServiceSoapClient webPermission = new PermissionServiceSoapClient();
48                      string jsonData = webPermission.LogOnByCompany(sitename, username, password);
49                      dynamic json = JsonConvert.DeserializeObject(jsonData);
50                      string statusCode=string.Empty;
51                      string statusMessage = string.Empty;
52                      string userData = string.Empty;
53                         statusCode = (string)((dynamic)json)["StatusCode"];
54                         statusMessage = (string)((dynamic)json)["StatusMessage"];
55                         if (string.Equals("OK", statusCode, StringComparison.OrdinalIgnoreCase))
56                         {
57                             userData = json["UserInfo"].ToString();
58                             userInfo = javaScriptSerializer.Deserialize<BaseUserInfo>(userData);
59                             FormsAuthentication.SetAuthCookie(userInfo.UserName, true, FormsAuthentication.FormsCookiePath);
60                             FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, userInfo.UserName, DateTime.Now, DateTime.Now.AddMinutes(20), false, userData);
61                             FormsIdentity identity = new FormsIdentity(authTicket);
62                             ManageCookies.AddCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
63                             loginResult.Status = statusCode;
64                             loginResult.Message = statusMessage;
65                         }
66                 }
67               string  result= javaScriptSerializer.Serialize(loginResult);
68               Response.Write(result);
69               Response.End();
70             }
71
72         }
73         /// <summary>
74         /// 登录结果
75         /// </summary>
76         class LoginResult
77         {
78             public string Status
79             {
80                 set;
81                 get;
82             }
83             public string Message
84             {
85                 set;
86                 get;
87             }
88         }
89     }

登录验证基类页主要代码

 1    using System.Web.Script.Serialization;
 2    using DotNet.Utilities;
 3     /// <summary>
 4     /// 权限基类页
 5     ///   1、单点登录信息 登陆后保存用户信息  FormsAuthenticationTicket
 6     ///   2、所有需要登录或炎症权限的均集成此类
 7     ///
 8     ///
 9     /// <author>
10     ///     <name>SongBiao</name>
11     ///     <date>2014.03.09</date>
12     /// </author>
13     /// </summary>
14    public class AuthBasePage : BasePage
15     {
16         protected BaseUserInfo userInfo = new BaseUserInfo();
17         protected string userData = string.Empty;
18          protected override void OnInit(EventArgs e)
19         {
20             //判断是否得到身份认证
21             if (!HttpContext.Current.User.Identity.IsAuthenticated)
22             {
23                 Response.Redirect(FormsAuthentication.LoginUrl);
24             }
25             HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
26             FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
27             userData = authTicket.UserData;
28             JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
29             userInfo=javaScriptSerializer.Deserialize<BaseUserInfo>(userData);          base.OnInit(e);30          }
31     } 

安全退出主要实现代码:需要实现本地退出时,主站也一起退出

    public partial class Logout : AuthBasePage{protected void Page_Load(object sender, EventArgs e){try{//本地站点先退出 这样在主站退出有异常时可保证本地安全退出FormsAuthentication.SignOut();//ManageCookies.RemoveCookie(FormsAuthentication.FormsCookieName);ManageCookies.SetCookie(FormsAuthentication.FormsCookieName, DateTime.Now.AddDays(-1));//主站退出DotNet.Business.Utilities.Logout(userInfo, false);}catch (Exception ex){LogHelper.WriteErrorLog("安全退出Logout出现异常", ex);}finally{//返回到登录页面Response.Redirect(FormsAuthentication.LoginUrl);}}}

注意 在Global.aspx中需要设置配置

        protected void Application_Start(object sender, EventArgs e){// 读取配置文件BaseConfiguration.GetSetting();}

上面using DotNet.Business;using DotNet.Utilities;是引用吉日嘎拉先生通用权限管理系统的组件。

这里还没涉及到权限管理这一块,如何进行登录后的权限控制下次再分享。

转载于:https://www.cnblogs.com/hnsongbiao/p/3595214.html

基于通用权限管理系统实现的单点登录相关推荐

  1. 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心...

    基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...

  2. 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码

    通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...

  3. 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统

    一.前言 在大型的信息管理系统中,经常涉及到权限管理系统 下面来个 demo,很多复杂的系统的设计都来自它 代码已经放到github上了,地址:https://github.com/larger5/s ...

  4. 通用权限管理系统组件 (GPM - General Permissions Manager) 中后一个登录的把前一个登录的踢掉功能的实现...

    最近客户有需要,同一个帐户可以重复登录系统,但是后登录的账户需要把前面已经登录的账户踢掉,例如客户把电脑打开在别的电脑上然后换一个房间,或者换个办公楼想登录时就会遇到很多麻烦,遇到郁闷的情况就是死活无 ...

  5. 通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多系统的统一登录(数据库源码级)附源码...

    眼前有20万行以上的代码时很多人都会眼花缭乱,不知道从哪里开始下手了,甚至不会去研究几下就直接放弃了.其实大多时候没有想象的那么复杂,代码里一大部分都是有重复的,有本质上差别的部分还是很少的. 春节期 ...

  6. 通用基于角色权限管理系统-李杰-专题视频课程

    通用基于角色权限管理系统-532人已学习 课程介绍         使用Django实现基于角色的权限访问控制(Role-Based Access Control)组件,其中涉及Django中间件.S ...

  7. 基于MVC4+EF5+EasyUI技术实现通用权限管理系统(EpPlus、HignCharts、Reportviewer报表)...

    基于MVC4+EF5+EasyUI技术实现通用权限管理系统(EpPlus.HignCharts.Reportviewer报表) 适合人群:高级 课时数量:150课时 用到技术:MVC.EF.T4.Lo ...

  8. 通用权限管理系统组件 给信息管理系统加一个初始化的功能,调用存储过程

    系统初始化的运行效果如下: 参数表是为了防止反复被初始化的,防止关键数据丢失. 其实很多人都提过希望有系统初始化的功能,最近稍微空一些,就给系统增加了一个初始化的功能,给大家参考一下. 首先写了一个存 ...

  9. 【商业版】C# ASP.NET 通用权限管理系统组件源码中的数据库访问组件可以全面支持Access单机数据库了...

    可能在5年前还用过Access单机数据库但是后来很少用了,可能平时接触的都是大型管理类系统的开发工作大部分是Oracle.SQLServer数据库上做开发的,很少做一些小网站或者单机版本的东西,所以跟 ...

最新文章

  1. 学以致用三十五-----像素的困惑
  2. mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String
  3. 一个棒棒糖引发的。。。
  4. oracle中通过游标实现查询
  5. lin-cms-dotnetcore功能模块的设计
  6. Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别
  7. 一般php的入口在哪,PHP单入口是否是必须的
  8. 20151217jqueryUI--自动补全工具
  9. 计网学习第一章:概述
  10. Arrays数组的常用方法
  11. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.15 如何掌握拍摄方向
  12. 5. CSS 类选择器
  13. 人机交互-8-交互式系统设计
  14. 计算机表格出现value,excel表格出现#value解决方法
  15. WorkBook的SaveAs方法
  16. 【面试】被问“怎么进行接口测试”的知识点大全
  17. QQ号转换成16进制登陆
  18. HTML 自定义实现emoji
  19. CDN服务器是什么意思?CDN服务器搭建部署
  20. win10局域网中只能发现部分计算机,Windows10系统局域网中共享计算机找不到怎么办...

热门文章

  1. C#判断文件及文件夹是否存在并创建
  2. “云计算”三部曲之二:与“云”共舞——再谈云计算
  3. springcloud 之 bus 消息总线
  4. hdu 3622 Bomb Game【二分+2-SAT+tarjan】
  5. dubbo入门学习笔记之入门demo(基于普通maven项目)
  6. Error: Cannot find module 'babel-runtime/regenerator'
  7. 本地与世界的区别-学习笔记(一)
  8. 新手谈谈网站交互设计
  9. RESTful Android
  10. .NET3.5中的高性能 Socket API