基于通用权限管理系统实现的单点登录
2014-03-11 22:30
639 查看
在一个项目中,需要使用单点登录,下面是我在结合通用权限管理系统做的一个登录程序,注意登录后本地服务器程序中没有使用session保存登录信息,使用的是FormsAuthentication。
登陆页主要代码
登录验证基类页主要代码
安全退出主要实现代码:需要实现本地退出时,主站也一起退出
注意 在Global.aspx中需要设置配置
上面using DotNet.Business;using DotNet.Utilities;是引用吉日嘎拉先生通用权限管理系统的组件。
这里还没涉及到权限管理这一块,如何进行登录后的权限控制下次再分享。
登陆页主要代码
using DotNet.Business; using DotNet.Utilities; using Newtonsoft.Json; using ZTOTransferFees.Foundation; using ZTOTransferFees.WebSite.WebPermission; /// <summary> /// 登录页面 /// /// <author> /// <name>SongBiao</name> /// <date>2014.03.09</date> /// </author> /// </summary> public partial class Login : BasePage { /// <summary> /// /// </summary> protected string act = string.Empty; /// <summary> /// 站点 /// </summary> protected string sitename = string.Empty; /// <summary> /// 用户名 /// </summary> protected string username = string.Empty; /// <summary> /// 密码 /// </summary> protected string password = string.Empty; protected void Page_Load(object sender, EventArgs e) { act = string.IsNullOrWhiteSpace(Request["act"]) || string.Equals(Request["act"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["act"].Trim(); if (!string.IsNullOrWhiteSpace(act) && string.Equals("login", Request["act"].Trim(), StringComparison.OrdinalIgnoreCase)) { Response.ContentType = "application/json"; sitename = string.IsNullOrWhiteSpace(Request["sitename"]) || string.Equals(Request["sitename"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["sitename"].Trim(); username = string.IsNullOrWhiteSpace(Request["username"]) || string.Equals(Request["username"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["username"].Trim(); password = string.IsNullOrWhiteSpace(Request["password"]) || string.Equals(Request["password"], "null", StringComparison.OrdinalIgnoreCase) ? "" : Request["password"].Trim(); LoginResult loginResult = new LoginResult(); BaseUserInfo userInfo = null; JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); if (!string.IsNullOrWhiteSpace(sitename) && !string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(password)) { //webservice 方式访问 PermissionServiceSoapClient webPermission = new PermissionServiceSoapClient(); string jsonData = webPermission.LogOnByCompany(sitename, username, password); dynamic json = JsonConvert.DeserializeObject(jsonData); string statusCode=string.Empty; string statusMessage = string.Empty; string userData = string.Empty; statusCode = (string)((dynamic)json)["StatusCode"]; statusMessage = (string)((dynamic)json)["StatusMessage"]; if (string.Equals("OK", statusCode, StringComparison.OrdinalIgnoreCase)) { userData = json["UserInfo"].ToString(); userInfo = javaScriptSerializer.Deserialize<BaseUserInfo>(userData); FormsAuthentication.SetAuthCookie(userInfo.UserName, true, FormsAuthentication.FormsCookiePath); FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, userInfo.UserName, DateTime.Now, DateTime.Now.AddMinutes(20), false, userData); FormsIdentity identity = new FormsIdentity(authTicket); ManageCookies.AddCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket)); loginResult.Status = statusCode; loginResult.Message = statusMessage; } } string result= javaScriptSerializer.Serialize(loginResult); Response.Write(result); Response.End(); } } /// <summary> /// 登录结果 /// </summary> class LoginResult { public string Status { set; get; } public string Message { set; get; } } }
登录验证基类页主要代码
using System.Web.Script.Serialization; using DotNet.Utilities; /// <summary> /// 权限基类页 /// 1、单点登录信息 登陆后保存用户信息 FormsAuthenticationTicket /// 2、所有需要登录或炎症权限的均集成此类 /// /// /// <author> /// <name>SongBiao</name> /// <date>2014.03.09</date> /// </author> /// </summary> public class AuthBasePage : BasePage { protected BaseUserInfo userInfo = new BaseUserInfo(); protected string userData = string.Empty; protected override void OnInit(EventArgs e) { //判断是否得到身份认证 if (!HttpContext.Current.User.Identity.IsAuthenticated) { Response.Redirect(FormsAuthentication.LoginUrl); } HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); userData = authTicket.UserData; JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); userInfo=javaScriptSerializer.Deserialize<BaseUserInfo>(userData); base.OnInit(e); } }
安全退出主要实现代码:需要实现本地退出时,主站也一起退出
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;是引用吉日嘎拉先生通用权限管理系统的组件。
这里还没涉及到权限管理这一块,如何进行登录后的权限控制下次再分享。
相关文章推荐
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中后一个登录的把前一个登录的踢掉功能的实现
- 一步步实现基于extjs4.2 + .net4.0 + mvc4 + petapoco的通用权限管理系统【概述】
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现统一身份认证(Single Sign On,单点登录)附源码
- 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心
- 基于MVC4+EF5+EasyUI技术实现通用权限管理系统(EpPlus、HignCharts、Reportviewer报表)
- 通用权限管理系统组件 中实现统一身份认证(Single Sign On,单点登录)附源码
- 通用权限管理系统组件 中后一个登录的把前一个登录的踢掉功能的实现
- 基于SSH实现员工管理系统登录权限的过滤器与拦截器的综合使用
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现大数据的高效分页显示
- 通用信息化开发平台 -- 通用权限管理系统改进登录日志显示功能
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现高性能的ASP.NET管理页面自动生成
- 基于SpringSecurity3.x, JasperReport5.x等技术实现仿金蝶权限管理的企业信息管理系统
- C#.NET 通用权限管理系统中的数据集权限设置实现参考界面(商业化成熟权限管理系统,提供全部源码)
- 高级权限管理系统的设计---- 基于角色+模块的权限控制管理实现
- 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例。
- 基于easyUI实现权限管理系统(四)——用户管理
- 基于RBAC模型的权限管理系统的设计和实现(转载)
- 基于RBAC模型的权限管理系统的设计和实现
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现大数据的高效分页显示
- 基于RBAC模型的通用企业权限管理系统