完整的单点登录功能目的:1.单点登录,是一个用得很多,也是大家比较常见的登录方式了。我在这里写这篇文章的
完整的单点登录功能
目的:
1.单点登录,是一个用得很多,也是大家比较常见的登录方式了。我在这里写这篇文章的目的,是因为我的这个单点登录里,用了简单的设计模式。供大家参考。
2.这篇文章的附件代码,是完整的单点登录代码。您可以直接下载,嵌入您的系统即可直接使用。这是基于前些文章,部分网友提出的要提供代码下载。所以,我采纳了这个建议,非常感谢各位朋友。
?
配置:
在web.config中,需要在<system.web>节点中,添加如下配置:
?///?<summary>
????///?在验证完成后发生
????///?</summary>
????///?<param?name="sender"></param>
????///?<param?name="e"></param>
????///?<author>马志远(Marc)</author>
????void?Application_AuthenticateRequest(Object?sender,?EventArgs?e)
????{
????????HttpApplication?app?=?(HttpApplication)sender;
????????HttpContext?context?=?app.Context;
????????if?(context.User?!=?null)
????????{
????????????if?(context.Request.IsAuthenticated?==?true)
????????????{
????????????????FormsIdentity?identity?=?(FormsIdentity)context.User.Identity;
????????????????FormsAuthenticationTicket?ticket?=?identity.Ticket;
????????????????string?userData?=?ticket.UserData;
????????????????string[]?roles?=?userData.Split(',');
????????????????context.User?=?new?System.Security.Principal.GenericPrincipal(identity,?roles);
????????????}
????????}
????}
????///?<summary>
????///?发送身份请求时触发
????///?</summary>
????///?<param?name="sender"></param>
????///?<param?name="e"></param>
????///?<author>马志远(Marc)</author>
????protected?void?Application_PostAuthenticateRequest(object?sender,?EventArgs?e)
????{
????????HttpContext?ctx?=?((HttpApplication)sender).Context;
????????HttpRequest?req?=?ctx.Request;
????????HttpResponse?resp?=?ctx.Response;
????????if?(!UrlAuthorizationModule.CheckUrlAccessForPrincipal(req.AppRelativeCurrentExecutionFilePath,?ctx.User,?req.RequestType))
????????{
????????????HttpContext.Current.Response.Redirect(String.Format("{0}?ReturnUrl={1}",?FormsAuthentication.LoginUrl,?req.Url.AbsoluteUri));
????????}
????}
?
?
文件目录结构:

?
用法:
1.登录时调用的方法在Passport.cs文件中。调用的代码如下:
?调用代码为:
CCNF.Tool.Authentication.User.GetInstance().AdministratorId等。
3.退出系统的代码在SignOut.cs的代码中。
????///?<summary>
????///?登录验证
????///?</summary>
????///?<creator>马志远(Marc)</creator>
????public?sealed?class?Passport?:?AuthenticationAbstract
????{
????????private?static?readonly?Passport?instance?=?new?Passport();
????????///?<summary>
????????///?构造函数
????????///?</summary>
????????///?<author>马志远(Marc)</author>
????????private?Passport()
????????{
????????}
????????static?Passport()?{?}
????????public?static?Passport?GetInstance()
????????{
????????????return?instance;
????????}
?
代码附件下载:
本代码为全部代码,直接下载嵌入项目即可使用。