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

专题图ylbtech-MVC编号:ylbtechASPnetMvc100010013Mvc4Security

1,功能描述

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

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

 

2,技术与环 境

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

3,解决方案资源管理器

 

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

4,功能截图

 4.1,匿名状态下()

  4.1.1  /Home/Index  网站首页

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

 

  4.1.2  /Account/Login  登录

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

 

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

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

 

 4.2,已登录状态下

  4.2.1  /Accout/Index  用户中心

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

 

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

登录页面
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>



<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

    Login

</asp:Content>



<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">



<h2>Login</h2>

<form action="/Account/Login" method="post">

    <fieldset>

    <legend>Login</legend>

        <input name="returnUrl" type="hidden" value='<%=ViewData["ReturnUrl"] %>' />

     username:<input id="username" name="username" value="sunshine" /><br />

     password:<input id="userpass" name="userpass" value="m123" /><br />

        <button type="submit">Login</button>

    </fieldset>

</form>

</asp:Content>

 

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

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”

 

warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作 者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究 法律责任的权利。

 

最终目标

 代码的国际化标准 示例 ylb,tech”,最大程度地规范软件编程 开发统一,优质, 高效,易学,为建设软件强国(中国)而努 力。

 

你可能感兴趣的:(Authentication)