开发者社区> 吞吞吐吐的> 正文

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ASP.NET 中验证的自定义返回和统一社会信用代码的内置验证实现
本文介绍 ASP.NET 中内置的验证功能,并介绍如何自定义验证返回信息,最后以统一社会信用代码为例,实现自定义的数据验证。
28 0
ASP.NET MVC5----常见的数据注解和验证
ASP.NET MVC5----常见的数据注解和验证
151 0
asp.net生成验证码并提交验证
asp.net生成验证码并提交验证
70 0
ASP.NET Core - 实现自定义WebApi模型验证
ASP.NET Core - 实现自定义WebApi模型验证  Framework时代    在Framework时代,我们一般进行参数验证的时候,以下代码是非常常见的 复制代码 [HttpPost] public async Task<JsonResult> SaveNewCus...
1457 0
ASP.NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一、案例结构总览   这里,假设我们有两个客户端(一个Web网站,一个移动App),他们要使用系统,需要通过API网关(这里API网关始终作为客户端的统一入口)先向IdentityService进行Login以进行验证并获取Token,在IdentityService的验证过程中会访问数据库以验证。
2591 0
ASP.NET Core微服务之基于IdentityServer建立授权与验证服务(2)
_Tip:_ 此篇已加入.NET Core微服务基础系列文章索引 上一篇我们基于IdentityServer4建立了一个AuthorizationServer,并且继承了QuickStartUI,能够成功获取Token了。
1719 0
ASP.NET Core微服务之基于IdentityServer建立授权与验证服务(1)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一、IdentityServer的预备知识   要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题,涉及到Token,OAuth&OpenID,JWT,协议规范等等等等,园子里已经有很多介绍的文章了,个人觉得solenovex的这一篇文章《学习IdentityServer4的预备知识》言简意赅,可以快速的看看。
1901 0
菜鸟入门【ASP.NET Core】15:MVC开发:ReturnUrl实现、Model后端验证 、Model前端验证
ReturnUrl实现 我们要实现returnUrl,我们需要在注册(Register)方法中接收传进的returnUrl并给它默认值null,然后将它保存在ViewData里面 然后我们定义一个内部方法来判断跳转returnUrl //内部跳转 private IActionR...
2113 0
+关注
吞吞吐吐的
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题)
立即下载
安全机制与User账户身份验证实战
立即下载
低代码开发师(初级)实战教程
立即下载