ASP.net MVC 4 中Security.FormsAuthentication验证用户的状态(匿名|已登录)

简介:

编号:ylbtechASPnetMvc100010013Mvc4Security

1,功能描述

   ASP.net MVC 4 下利用 System.Web.Security.FormsAuthentication类,验证用户的状态(匿名|已登录 )

以项目为例:在视图和和区域里的视图,分别都列举俩个页面(允许匿名和不允许匿名)。

2,技术与环 境

  ASP.net MVC 4 下System.Web.Security.FormsAuthentication类,验证用户的状 态(匿名|已登录)

3,解决方案资源管理器

 

4,功能截图

 4.1,匿名状态下()

4.1.1  /Home/Index  网站首页

 4.1.2  /Account/Login  登录

 4.1.3  只要是匿名用户,单击加“[NM]”修饰的地址,都会跳转到/Accout/Login页面

  4.2,已登录状态下

4.2.1  /Accout/Index  用户中心

5,代码分析

 5.1,  /web.config  设置重定向登录页面

<authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

5.2,  /Controllers/AccountController.cs 账户管理控制器    ylb_tip:1, 加“[Authorize]”修饰的方法拒绝匿名

                             ylb_tip:2, 提示如果是"HttpPost" 提交,则Request["param"])则再也获取不了值。

 ylb_tip:3, 在返回"ReturnUrl"的时候与以前的不同

using  System.Web.Mvc;
 
using  System.Web.Security;
namespace  Mvc4Security.Controllers
{
     public  class  AccountController : Controller
     {
         //
         // GET: /Account/
         [Authorize]
         public  ActionResult Index()
         {
             return  View();
         }
 
         //
         //  GET: /Account/Login
 
         [HttpGet]
         public  ActionResult Login()
         {
             //如果是跳转过来的,则返回上一页面ReturnUrl
             if  (! string .IsNullOrEmpty(Request[ "ReturnUrl" ]))
             {
                 string  returnUrl = Request[ "ReturnUrl" ];
                 ViewData[ "ReturnUrl" ] = returnUrl;  //如果存在返回,则存在隐藏标签中
              }
 
             // 如果是登录状态,则条转到个人主页
             if  (Session[ "Username" ] != null )
             {
                 return  RedirectToAction( "Index" );
             }
             else
             {
                 return  View();
             }
         }
 
         //
         // Post: /Account/Login
 
         [HttpPost]
         public  ActionResult Login( string  username, string  userpass, string  returnUrl)
         {
 
             if  (username == "sunshine"  && userpass == "m123" )
             {
 
                 //创建身份验证票证,即转换为“已登录状态”
                 FormsAuthentication.SetAuthCookie(username, false );
                 //存入Session
                 Session[ "Username" ] = username;
 
                 //如果是跳转过来的,则返回上一页面ReturnUrl
                 if  (returnUrl.Trim().Length!=0)
                 {
                     return  Redirect(returnUrl);
                 }
                 else
                 {
                     //用户个人主页
                     return  RedirectToAction( "Index" );
                 }
             }
             else
             {
                 ViewData[ "Tip" ] = "用户名或密码有误!" ;
                 return  View();
             }
         }
 
         //
         // GET: /Account/Logout
 
         [HttpGet]
         public  ActionResult Logout()
         {
             //取消Session会话
             Session.Abandon();
 
             //删除Forms验证票证
             FormsAuthentication.SignOut();
 
             return  RedirectToAction( "Index" , "Home" );
         }
     }
}

5.3  /Controllers/HomeController.cs  首页控制器(注:区域里面的权限原理相同,在这儿就不多介绍)

using  System.Web.Mvc;
 
namespace  Mvc4Security.Controllers
{
     public  class  HomeController : Controller
     {
         //
         // GET: /Home/
 
         public  ActionResult Index()
         {
             return  View();
         }
 
         //
         // GET: /Home/VipIndex
         [Authorize]
         public  ActionResult VipIndex()
         {
             return  View();
         }
     }
}

 5.4  /Account/Login

登录页面

 5.5  /Global  不同:有划分出了“Application_Start”方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.Http;
using  System.Web.Mvc;
using  System.Web.Routing;
 
namespace  Mvc4Security
{
     // Note: For instructions on enabling IIS6 or IIS7 classic mode,
     // visit http://go.microsoft.com/?LinkId=9394801
     public  class  MvcApplication : System.Web.HttpApplication
     {
         protected  void  Application_Start()
         {
             AreaRegistration.RegisterAllAreas();
 
             WebApiConfig.Register(GlobalConfiguration.Configuration);
             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
             RouteConfig.RegisterRoutes(RouteTable.Routes);
         }
     }
}

 5.6.1  /App_Start/RouteConfig.cs  不同:这里的路由参数必须是键值对。

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.Mvc;
using  System.Web.Routing;
 
namespace  Mvc4Security
{
     public  class  RouteConfig
     {
         public  static  void  RegisterRoutes(RouteCollection routes)
         {
             routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
 
             routes.MapRoute(
                 name: "Default" ,
                 url: "{controller}/{action}/{id}" ,
                 defaults: new  { controller = "Home" , action = "Index" , id = UrlParameter.Optional },namespaces: new
                 string [] { "Mvc4Security.Controllers"  }
             );
         }
     }
}

 5.6.2  /App_Start/FilterConfig.cs 【没修改】 

using  System.Web;
using  System.Web.Mvc;
 
namespace  Mvc4Security
{
     public  class  FilterConfig
     {
         public  static  void  RegisterGlobalFilters(GlobalFilterCollection filters)
         {
             filters.Add( new  HandleErrorAttribute());
         }
     }
}

 5.6.3  /App_Start/WebApiConfig.cs【没修改】 

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web.Http;
 
namespace  Mvc4Security
{
     public  static  class  WebApiConfig
     {
         public  static  void  Register(HttpConfiguration config)
         {
             config.Routes.MapHttpRoute(
                 name: "DefaultApi" ,
                 routeTemplate: "api/{controller}/{id}" ,
                 defaults: new  { id = RouteParameter.Optional }
             );
         }
     }
}

 

6,示例 |讲解案例下载

博客园讲解: http://ylbtech.cnblogs.com/

百度文库开发文档: http://passport.baidu.com/? business&aid=6&un=ylbtech#7

谷歌开源代码下载: http://code.google.com/p/ylbtechaspnetmvc/downloads/list

请单击 “ylbtechASPnetMvcSecurity100010010”

百度网盘  http://pan.baidu.com/s/1i49zn73

请单击 “ASPnetMvcSecurity100010010”


本文转自ylbtech博客园博客,原文链接:http://www.cnblogs.com/ylbtech/archive/2012/08/29/2660799.html,如需转载请自行联系原作者

相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
30天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
30天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
123 0
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
51 0
|
8月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(完:内附源码)
经过一段时间的准备,【ASP.NET Core MVC开发实战之商城系统】已经完成,目前代码已开发完成,先将全部内容整理分享,如有不足之处,还请指正。
106 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
114 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
67 0