zoukankan      html  css  js  c++  java
  • 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

    登录页面
    <%@ 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”

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

    请单击 “ASPnetMvcSecurity100010010”

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

     

    最终目标

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

     

  • 相关阅读:
    服务器修改时间
    修改MySQL时区
    记录一次服务器防火墙开放端口,参考了网上一位网友的方法可行,在此记录一下
    centos7.2放行80端口
    从零开始搭建系统3.4——缓存组件开发
    从零开始搭建系统3.3——图片服务开发及部署
    从零开始搭建系统3.2——微服务注册中心开发及部署
    从零开始搭搭建系统3.1——顶级pom制定
    从零开始搭建系统2.7——Quartz安装及配置
    从零开始搭建系统2.4——Jenkins安装及配置
  • 原文地址:https://www.cnblogs.com/ylbtech/p/2660799.html
Copyright © 2011-2022 走看看