- 浏览: 2184550 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (1878)
- [网站分类]ASP.NET (141)
- [网站分类]C# (80)
- [随笔分类]NET知识库 (80)
- [随笔分类]摘抄文字[非技术] (3)
- [随笔分类]养生保健 (4)
- [网站分类]读书区 (16)
- [随笔分类]赚钱 (7)
- [网站分类].NET新手区 (233)
- [随笔分类]网站 (75)
- [网站分类]企业信息化其他 (4)
- [网站分类]首页候选区 (34)
- [网站分类]转载区 (12)
- [网站分类]SQL Server (16)
- [网站分类]程序人生 (7)
- [网站分类]WinForm (2)
- [随笔分类]错误集 (12)
- [网站分类]JavaScript (3)
- [随笔分类]小说九鼎记 (69)
- [随笔分类]技术文章 (15)
- [网站分类]求职面试 (3)
- [网站分类]其他技术区 (6)
- [网站分类]非技术区 (10)
- [发布至博客园首页] (5)
- [网站分类]jQuery (6)
- [网站分类].NET精华区 (6)
- [网站分类]Html/Css (10)
- [随笔分类]加速及SEO (10)
- [网站分类]Google开发 (4)
- [随笔分类]旅游备注 (2)
- [网站分类]架构设计 (3)
- [网站分类]Linux (23)
- [随笔分类]重要注册 (3)
- [随笔分类]Linux+PHP (10)
- [网站分类]PHP (11)
- [网站分类]VS2010 (2)
- [网站分类]CLR (1)
- [网站分类]C++ (1)
- [网站分类]ASP.NET MVC (2)
- [网站分类]项目与团队管理 (1)
- [随笔分类]个人总结 (1)
- [随笔分类]问题集 (3)
- [网站分类]代码与软件发布 (1)
- [网站分类]Android开发 (1)
- [网站分类]MySQL (1)
- [网站分类]开源研究 (6)
- ddd (0)
- 好久没写blog了 (0)
- sqlserver (2)
最新评论
-
JamesLiuX:
博主,能组个队么,我是Freelancer新手。
Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出? -
yw10260609:
我认为在混淆前,最好把相关代码备份一下比较好,不然项目完成后, ...
DotFuscator 小记 -
日月葬花魂:
大哥 能 加我个QQ 交流一下嘛 ?51264722 我Q ...
web应用程序和Web网站区别 -
iaimg:
我想问下嵌入delphi写的程序总是出现窗体后面感觉有个主窗体 ...
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部 -
iaimg:
代码地址下不了啊!
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
做为开发者,我们希望经过我们手中出来的代码,是效率最高的,速度最快的,性能最优化的。
我们在探索代码的完美,我们在想着,是不是有更好的代码比我现在这样的写好,
我们想寻找最好的代码,
我们在想,
我们还是在想,却仍没有去敲键盘。
不知不觉浪费了好多的时间,我的还是在想,还是没有代码的呈现。
究竟什么才是最完美的代码呢?
应该是没有最完美的代码。我们在经过简单的思考后,应该执着着去写,经过时间的沉淀,不断的修改和完善,
看到别人的代码,想下人家的思考,如果优于自己,可以取其精华,结合自己的代码不断的去成长,去提高 ,
//修改1 ,已经把代码粘到代码编辑器中了,
//我认为这种代码也比较好,但是有点不想接受,逻辑上有点不顺,感觉,想寻找更好的代码和逻辑
我们往往不太注重逻辑,我们往往下笔没有神,因为copy,del的太简单,在不断的keyword,del的时候,最仍然没有出一个好的逻辑 ,
一次去面试,最后一道是算法题,我是拿着笔就开写了,写着写着,觉得要变动,没有Del,只有划,最后的结果呢,
面试纸上划下了一大片,却仍然没有一个真正的逻辑出来。
为什么不能先想好,才下笔呢。
程序不是作文,写一半就会有一半的分数,
程序不是作文,结果不对就是错的。
最近买了李天平的那本书,附上一个书中的登陆代码。这个登陆主要是用到了微软的安全类,
我不知道大家平时用的登陆,是怎么实现的。有没有比这个还优秀一点的。
比较难以理解的名字,做了一下通俗的解释。希望对大家有一些帮助。
1.负责人(principal)-运行环境 身份(identity)-用户 授权(Authentication)
Authorization 授权 判断用户是否有权操作,比如登录的用户有没有权限访问资源或者数据库
Authentication 认证 用户的Identity. 主要有:HTTP基础认证、证书、Kerberos、Passport、NTLM、Forms-based、Digest
一般应用先authenticate用户, 判断用户是否能链接到系统。然后authorization, 判断对某个功能是否有权限。
2.HttpModuler 监视器 过滤传到httpHand上的数据


using System;
using System.Collections;
using System.Security;
using System.Security.Cryptography;
using System.Text;
namespace Permission.WebAdmin
{
/// <summary>
/// 用户对象的安全上下文信息
/// </summary>
public class AccountsPrincipal : System.Security.Principal.IPrincipal
{
#region 属性
protected System.Security.Principal.IIdentity identity;
protected ArrayList permissionList;
protected ArrayList permissionListid;
protected ArrayList roleList;
/// <summary>
/// 当前用户的所有角色
/// </summary>
public ArrayList Roles
{
get
{
return roleList;
}
}
/// <summary>
/// 当前用户拥有的权限列表
/// </summary>
public ArrayList Permissions
{
get
{
return permissionList;
}
}
/// <summary>
/// 当前用户拥有的权限ID列表
/// </summary>
public ArrayList PermissionsID
{
get
{
return permissionListid;
}
}
// IPrincipal Interface Requirements:
/// <summary>
/// 当前用户的标识对象
/// </summary>
public System.Security.Principal.IIdentity Identity
{
get
{
return identity;
}
set
{
identity = value;
}
}
#endregion
/// <summary>
/// 根据用户编号构造
/// </summary>
public AccountsPrincipal(int userID)
{
identity = new SiteIdentity(userID);
permissionList = AccountsPrincipalDLL.GetEffectivePermissionList(userID);
permissionListid = AccountsPrincipalDLL.GetEffectivePermissionListID(userID);
roleList = AccountsPrincipalDLL.GetUserRoles(userID);
}
/// <summary>
/// 根据用户名构造
/// </summary>
public AccountsPrincipal(string userName)
{
identity = new SiteIdentity(userName);
permissionList = AccountsPrincipalDLL.GetEffectivePermissionList(((SiteIdentity)identity).UserID);
permissionListid = AccountsPrincipalDLL.GetEffectivePermissionListID(((SiteIdentity)identity).UserID);
roleList = AccountsPrincipalDLL.GetUserRoles(((SiteIdentity)identity).UserID);
}
/// <summary>
/// 当前用户是否属于指定名称的角色
/// </summary>
public bool IsInRole(string role)
{
return roleList.Contains(role);
}
/// <summary>
/// 当前用户是否拥有指定名称的权限
/// </summary>
public bool HasPermission(string permission)
{
return permissionList.Contains(permission);
}
/// <summary>
/// 当前用户是否拥有指定的权限
/// </summary>
public bool HasPermissionID(int permissionid)
{
return permissionListid.Contains(permissionid);
}
/// <summary>
/// 验证登录信息
/// </summary>
public static AccountsPrincipal ValidateLogin(string userName, string password)
{
int newID;
byte[] cryptPassword = EncryptPassword(password);
Data.User dataUser = new Data.User();
if ((newID = dataUser.ValidateLogin(userName, cryptPassword)) > 0)
return new AccountsPrincipal(newID);
else
return null;
}
/// <summary>
/// 密码加密
/// </summary>
public static byte[] EncryptPassword(string password)
{
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] hashBytes = encoding.GetBytes(password);
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] cryptPassword = sha1.ComputeHash(hashBytes);
return cryptPassword;
}
}
}
二
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Permission.Common;
namespace Permission.WebAdmin
{
/// <summary>
/// 页面基类
/// </summary>
public class PageBase : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.Load += new System.EventHandler(this.Page_Load);
this.Error += new System.EventHandler(this.Page_Error);
}
#region 权限检查
/// <summary>
/// 页面访问权限ID。
/// </summary>
public virtual int PermissionID
{
get { return -1; }
}
public AccountsPrincipal CurrentPrincipal
{
get
{
if (Context.User.Identity.IsAuthenticated)
{
AccountsPrincipal user = new AccountsPrincipal(Context.User.Identity.Name);
return user;
}
return null;
}
}
/// <summary>
/// 当前用户信息
/// </summary>
public Tb_Accounts_Users CurrentUser
{
get
{
if (CurrentPrincipal == null)
{
return null;
}
if (Session["UserInfo"] == null)
{
LTP.Accounts.Bus.User currentUser = new LTP.Accounts.Bus.User(CurrentPrincipal);
Session["UserInfo"] = currentUser;
}
return Session["UserInfo"] as Tb_Accounts_Users;
}
}
#endregion
#region 页面事件
private void Page_Load(object sender, System.EventArgs e)
{
//网站域名或虚拟目录
string virtualPath = ConfigurationManager.AppSettings.Get("VirtualPath");
//登录页地址
string loginPage = ConfigurationManager.AppSettings.Get("LoginPage");
if (Context.User.Identity.IsAuthenticated)
{
AccountsPrincipal user = new AccountsPrincipal(Context.User.Identity.Name);
if ((PermissionID != -1) && (!user.HasPermissionID(PermissionID)))
{
Response.Clear();
Response.Write("<script defer>window.alert('您没有权限进入本页!');history.back();</script>");
Response.End();
}
}
else
{
FormsAuthentication.SignOut();
Session.Clear();
Session.Abandon();
Response.Clear();
Response.Write("<script defer>window.alert('您没有权限进入本页或当前登录用户已过期!http://www.cnblogs.com/hsapphire/admin/file://n/请重新登录或与管理员联系!');parent.location='" + virtualPath + "/" + loginPage + "';</script>");
Response.End();
}
}
protected void Page_Error(object sender, System.EventArgs e)
{
string errMsg = "";
Exception currentError = Server.GetLastError();
errMsg += "系统发生错误:<br/>" +
"错误地址: " + Request.Url.ToString() + "<br/>" +
"错误信息: " + currentError.Message.ToString() + "<br/>";
Response.Write(errMsg);
Server.ClearError();//要注意这句代码的使用,清除异常。
}
#endregion
#region URL参数
public virtual string Name
{
get
{
if ((Request["name"] != null) && (Request["name"].ToString() != ""))
{
return Request.QueryString["name"].Trim();
}
return "";
}
}
#endregion
}
}
三。
using System;
using System.Collections.Generic;
using System.Text;
using Permission.Common;
using System.Security.Cryptography;
namespace Permission.WebAdmin
{
/// <summary>
/// 当前用户的标识对象
/// </summary>
[Serializable]
public class SiteIdentity : System.Security.Principal.IIdentity
{
#region 用户属性
private string userName;
private string trueName;
private string email;
private byte[] password;
private int userID;
private string sex;
/// <summary>
/// 用户名
/// </summary>
public string UserName
{
get
{
return userName;
}
}
/// <summary>
/// 真实姓名
/// </summary>
public string TrueName
{
get
{
return trueName;
}
}
/// <summary>
/// 邮箱
/// </summary>
public string Email
{
get
{
return email;
}
}
/// <summary>
/// 用户编号
/// </summary>
public int UserID
{
get
{
return userID;
}
}
/// <summary>
/// 密码
/// </summary>
public byte[] Password
{
get
{
return password;
}
}
/// <summary>
/// 性别
/// </summary>
public string Sex
{
get
{
return sex;
}
}
#endregion
#region IIdentity interface requirments:
/// <summary>
/// 当前用户的名称
/// </summary>
public string Name
{
get
{
return userName;
}
}
/// <summary>
/// 获取所使用的身份验证的类型。
/// </summary>
public string AuthenticationType
{
get
{
return "Custom Authentication";
}
set
{
// do nothing
}
}
/// <summary>
/// 是否验证了用户
/// </summary>
public bool IsAuthenticated
{
get
{
return true;
}
}
#endregion
/// <summary>
/// 根据用户名构造
/// </summary>
public SiteIdentity(string currentUserName)
{
Tb_Accounts_Users entityUser=BllAccess . UserDLL.UserGetModelByUserName(currentUserName);
userName = currentUserName;
trueName = entityUser.TrueName;
email = entityUser.Email;
userID = entityUser.UserID;
password = entityUser.Password;
sex = entityUser.Sex;
}
/// <summary>
/// 根据用户ID构造
/// </summary>
public SiteIdentity(int currentUserID)
{
Tb_Accounts_Users entityUser = UserDLL.UserGetModelByUserID(currentUserID);
userName = entityUser.UserName;
trueName = entityUser.TrueName;
email = entityUser.Email;
userID = currentUserID;
password = entityUser.Password;
sex = entityUser.Sex;
}
/// <summary>
/// 检查当前用户对象密码
/// </summary>
public int TestPassword(string password)
{
// At some point, we may have a more complex way of encrypting or storing the passwords
// so by supplying this procedure, we can simply replace its contents to move password
// comparison to the database (as we've done below) or somewhere else (e.g. another
// web service, etc).
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] hashBytes = encoding.GetBytes(password);
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] cryptPassword = sha1.ComputeHash(hashBytes);
return UserDLL.TestPassword(userID, cryptPassword);
}
}
}
发表评论
-
where T:new() 是什么意思
2014-04-18 09:26 1468where T:new() 是什么意思 经常看到方法后面 ... -
好久没写blog了
2012-05-21 18:43 2好久没写blog了 -
test
2011-03-19 09:48 821testddddddddddd -
QQ自动发日志分析
2011-03-10 18:15 1276首先列举比较重要的问 ... -
test
2011-02-23 18:03 812test -
test
2011-02-23 17:53 885test -
为啥cnblogs的数据不能导了
2011-02-23 11:03 919为啥cnblogs的数据不能导了内容 -
如何保护.net中的dll文件(防破解、反编译)
2010-07-30 00:28 1499.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL ... -
提搞网站访问速度可做哪些优化
2010-08-08 15:30 1124一、 服务器优化 ... -
ASP.NET(c#)如何判断浏览器是否支持cookies
2010-07-29 09:33 1724实例代码: 下面是写cookie ... -
N点虚拟主机管理系统(For Windows2003/2008)功能及介绍
2010-04-09 11:23 2269N点虚拟主机管理系统是 ... -
使用c#+(datagrid控件)编辑xml文件
2010-04-06 09:13 1174对xml文件的记录进行删除,修改,或增加新记录。 利用了d ... -
HTTP代理模块(HTTP Proxy)
2010-04-04 10:19 3055HTTP代理模块(HTTP Proxy ... -
Error 80040154 retreiving COM Class factory
2010-03-29 09:23 22601.ask: Greetings, I have ... -
petshop4.0 详解之二(数据访问层之数据库访问设计)
2010-03-27 11:08 1076在系列一中,我从整体上分析了PetShop的架构设计,并提及了 ... -
分享十五个最佳jQuery幻灯插件和教程
2010-03-25 09:17 2015<p>在网站前端中使用jQuery库已经变得越来越 ... -
20个软件开发常用设计文档大全下载
2009-08-27 10:22 979搜集了一些软件开发的常用文档,分享给大家 总下载地址: h ... -
asp.net 在线 mp3,wma, avi
2009-09-04 13:58 9341.前台js<script type="tex ... -
sql db link string
2009-09-06 21:52 988SQL Server ODBC Standar ... -
ASP.Net2.0小技巧 保持滚动条的位置 焦点移动到某个控件 $符号轻松的使用FindControl
2009-09-11 11:05 1304您可能不知道的ASP.Net2.0 ...
相关推荐
SSH(Struts2、Spring、Hibernate)...总的来说,这个项目提供了一个使用SSH框架和Spring注解实现的登录功能实例,通过分析和学习,你可以更好地理解SSH框架的工作原理以及如何在实际项目中应用Spring注解来简化开发。
在IT行业中,网页设计是至关重要的一个领域,尤其对于后台管理系统而言,登录界面是用户与系统交互的第一步,因此设计良好的后台...通过深入研究和实践,你将能够提升你的前端技能,为你的项目带来更优质的用户体验。
6. **错误处理**:在源码中寻找错误处理部分,学习如何编写异常处理代码,确保程序在遇到问题时能够优雅地处理并给出反馈。 7. **代码优化**:如果源码中存在可以改进的地方,可以探讨如何优化代码,提高其效率和可...
《易语言程序源码解析——泡泡沫自动登陆.zip》 易语言,作为一款中国本土的编程语言,以其独特的...通过深入研究这个项目,我们不仅能提升编程技能,还能更好地理解和应用易语言,为未来的开发工作打下坚实的基础。
为了更好地配合这一模板使用,久久晴天推出了专门设计的“淘宝新旺铺专业版特效代码装修软件”,并已经升级至8.10版本,提供了更为强大的店铺装修功能,特别是动态效果的实现。 升级后的久久晴天淘宝新旺铺专业版...
2. "点这里查看更多优质源码~.url" - 这可能是一个链接,指向一个包含更多开源项目或优质源码的网站,对于开发者寻找学习材料或灵感很有帮助。 3. "androidcase" - 这可能是一个目录,包含了项目的Android工程文件...
易语言的特性使得这个源码对于初学者来说是很好的学习资源,他们可以借此了解基础的编程概念,如变量、控制结构、函数等,以及更高级的主题,如网络通信和数据加密。对于有经验的开发者,它可以提供一种快速构建登录...
面向对象编程允许我们更好地封装复杂性,使代码易于维护和扩展。 2. 继承与多态:在愤怒的小鸟游戏中,不同的鸟可能有不同的飞行特性和攻击方式,这可以通过继承和多态实现。子类可以继承父类的属性并覆盖或扩展...
【压缩包子文件的文件名称列表】中的"Chapter06"可能表示这是某个系列教程或项目的第六章,这通常意味着代码会涵盖更高级或进阶的主题,例如遗传算法的改进版,或者更复杂的逻辑和算法实现。 在这些代码中,我们...
标题中的“易语言Ex_Ui登陆界面开源 加了缓动特效(支持库模块已打包)”表明这是一个关于易语言(EasyLanguage)的项目,它提供了一个登录界面的源代码,并且这个界面具有缓动特效。缓动特效是动画设计中常见的一种...
如果你正在寻找一个逐步学习Delphi的资源,这个视频教程会是一个很好的起点。 总的来说,这个教程不仅教你如何进行基本的文件操作,还涵盖了更高级的主题,如用户界面设计和数据安全,有助于你从新手成长为熟练的...
5. **异常处理**:在实际编程中,还要考虑网络异常、服务器错误等情况,需要添加适当的错误处理代码,确保程序的健壮性。 在这个过程中,提供的源码"易语言检测百度帐号登陆时是否需要验证码"应当包含了上述步骤的...
“资料”标签则暗示该压缩包可能包含相关文档或教程,帮助用户更好地理解和使用系统。 总的来说,bd66多功能私服发布系统 v1.0.1 修正增强版是一个面向游戏服务器运营者的强大工具,它的开源特性赋予了用户更大的...
在IT行业中,Flash曾是一种广泛应用于网页动画和交互设计的工具,因其丰富的视觉效果和动态展示而备受青睐。...通过学习和使用这些模板,不仅可以提升设计技能,也能更好地理解和把握当前的动画设计趋势。
开发者可以根据自己的需求对源码进行修改,增加或调整功能,使其更好地融入到自己的网站环境中。这对于那些熟悉编程的用户来说,无疑增加了系统的灵活性和适应性。 资料方面,由于标签中提到了“源代码”和“源码”...
4. 数据展示:集成多个图表库,如Chart.js和 Morris.js,用于数据可视化,帮助管理员更好地理解和分析数据。 5. 强大的导航:支持多级导航菜单,可轻松实现复杂的菜单结构。 6. 兼容性和优化:模板对主流浏览器如...
1. **升级浏览器**:推荐用户使用更新的浏览器版本,如Google Chrome或Microsoft Edge,这些浏览器对Web标准支持更全面,能更好地兼容Cognos的报表导出功能。 2. **检查浏览器设置**:确保浏览器的安全性和隐私设置...
【啊D注入工具】是一款广泛应用于IT安全领域的数据库漏洞检测工具,主要针对SQL注入问题进行检测和防范。...通过深入理解和有效使用此类工具,我们可以更好地预防和应对SQL注入攻击,保障网络环境的安全稳定。
这里,若使用Google Chrome分析”请求“对应的链接(方法:右键→审查元素→Network→清空,点击”加载更多“,出现对应的GET链接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程。...