基于.net mvc的校友录五 web.config对的配置以及filter实现的权限控制

web.config配置文件

此文件是整个系统的配置中心,它告诉iis服务器本网站需要哪些运行时环境,需要哪些环境,将要进行哪些操作,开发人员也会将一个常量性的数据放在此配置中,以备系统全局调用。此文件内容丰富,对于一些普适性的项目,不作说明,只针对本系统的配置作相应说明。

web.config配置文件

web.config是xml格式的文件,它是一种结构性文档,可以通过结点对数据进行遍历。第一行<?xml version="1.0" encoding="utf-8"?>说明了xml所使用的格式与本文件的编码类型,默认是unicode,这里改成了utf-8。下面就是configuration父级结点,也就是说,这里所有内容都是配置性的内容了。这里要重点说明的是connectionStrings结点,这一项保存了ABConnection数据库连接字符串。此字符串中包含了数据库文件,并声明了所需要的支持引擎(System.Data.SqlServerCe.4.0)。

在第97行有一个entityframework结点,这是vs自动配置的,用户可以在项目-属性中设置所使用的版本。当然,许多人还会在web.config中写membership,这是用来作权限控制的。这也是.NET MVC中的新功能,但是由于vs会因此自动建立数据表,导致用户对整个系统的掌握度降低,所以,权限方面设想了两种解决方案,后面会说。第70行runtime的第二子级都是默认引用的命名空间,当用户在本项目中新建一个类的时候,他们都会默认引用这些命名空间,以节省时间。

权限控制模块Filter

权限控制是一个网站系统的必须功能,大到角色权限,小到控制用户是否登陆,都有涉及。.net一直都为此提供了丰富的实用的方法,比如aspx时代的from验证,直接拖了控件就可以了,然后配置一下,每一页都会进行自动验证。而MVC不存在控制这个说法,所以拖控件这种形式已经不可取了,因为微软又给用户提供了membership来控制,但是由于membership要在数据库中自然生成表,而且,表的字段非常多,加上强制定义了一些person的属性,然后person实体类的构造方法又没有空参数的,所以,构造起来非常麻烦,想到每次要写几十个字段赋值,太可怕了。所以,经过考虑,决定自己来解决权限验证的问题,权限验证包括两部分:a.验证是不是在线用户;b.验证进行管理员操作的是不是管理员。其实这两种方法的实现是相同的,就拿检测用户是否存在为例说明,由于本项目目的在于应用.NET MVC,所以,期间并没有进行安全方面的过多设置。

由于所有的逻辑都要由控制器来控制,所以最先想到的就是从控制器获取控制权限,想在每一个控制中调用一个静态方法,那就可以先写一个父控制器,实现一个静态方法,然后其它的控制器都继承该控制器,之后在每一个控制器的方法中,先使用此静态方法验证一次。但是,此方法似乎打破了.NET MVC的正常文件结构。所以,最后没有采用它,而选择了.NET MVC中新的特性filter。filter其实就是方法的特性属性。如果控制了方法的属性,写了方法的事件,那么该方法执行以后就可以得到控制。

在项目中添加文件夹Filter,在此文件夹内新建类IsLogedAttribute.cs,这个类就是一个Filter,其功能是在执行一个控制器方法的时候,检测当前用户是否在线。

引用的命名空间:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.MVC;

using AlumniBook.Models;

using AlumniBook.Ensleep;

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/net/

Ensleep是自己写的工具类,里面提供了一些封装的方法。Models是对实体模型的引用,保证了在此类中可以调用实体模型,进行数据比对。其它系统级的调用,都是.NET MVC项目中必需引用的命名空间。

public class IsLogedAttribute : FilterAttribute, IActionFilter

{

     void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)

       {

        }

   void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)

       {

           此处省略代码内容

}

}

此类继承了FilterAttribute和IActionFilter两个类,后者是接口,前面一个父类提供了公用方法,后面接口则确保了要实现OnActionExecuted和OnActionExecuting方法。这两个方法就是Filter功能实现的重点。

OnActionExecuted是指在Action执行之后要执行的方法。这里面是要在方法执行之前进行操作,所以,这个方法无须进行额外操作。OnActionExecuting则是在方法执行之前触发,这里主要实现这个方法。它的参数为ActionExecutingContext类型,它包含了html请求中的所有属性,并且在方法执行完成后,它可以带着相应的数据回到之前的进程中,执行相应的操作。下面来看一下控制器方法如何引用Filter。

public class PersonalCenterController : Controller

   {

        [IsLoged]

       public ActionResult Index()

       {}

}

这是个人中心的控制器,Index是它的一个方法,当有请求Url为:/Personal/Index时,因为有IsLoged特性标记,所以,会先执行IsLoged中的OnActionExecuting方法。然后从filterContext中取得session,再查看服务器上的sesson是否保存着当前对话,若是没有,说明用户浏览器关掉过,或者是用户已经长久没有操作了,这个时候就要让用户退出,用户所请求的操作非法,将用户转向登陆页面。filterContext.HttpContext.Response.Redirect("/Log/Login", true);是控制用户请求的转向,true代表用户之前的请求操作是否继续执行,true是终止。也就是说,控制器中的Index方法还没有执行的时候,就已经结束了。如果session验证的数据存在,那么,会调用封装的方法Sleep.IsMyuser(),这个方法判定一个用户是否是合法用户,传入的是字符串用户名,因为是测试功能实现的,所以,此处没有进行md5加密。如果检测到是数据库中的用户,那么就不进行任何操作,这样,当Filter执行完成后,会自动跳回到之前的控制器中的方法继续执行。如果不是数据库中的用户,那么就是没有登陆,这个时候,将session中的username移除,然后将用户转向到登陆页面。

时间: 2024-10-30 15:01:18

基于.net mvc的校友录五 web.config对的配置以及filter实现的权限控制的相关文章

基于.net mvc的校友录 三、实体模型实现

由于是实际开发,而且是时间比较紧的,所以,在开发实现过程中,总有一些对原计划的改动: AlumniBookModel数据库实体模型 这是主数据实体类,EF会根据此实体生成数据库,它的每一个成员都是DbSet类型,这是数据集类型,也就是内存中的表,数据库AlumniBookModel中共有九张表,它们的名字分别是成员的名字,但是,若是打开数据库,就会发现,它们的表名是这些成员名的复数,而这个机制,开篇已经有讲过,这里不再多说.再来看一下它的构造函数: public class AlumniBook

基于.net mvc的校友录 四、系统结构图

这是整个系统结构的预览,话不多说,给个图: 本网站努力为每个人提供一个有效的校友录系统,为参与者提供一个简单有效的交流互动的平台,操作上要求简单.高效,性能上要求稳定.可扩展.在对同类网站系统进行了调查之后,通过重新设计,为网站使用者提供了如下的功能操作:管理员可以管理用户.用户可以搜索班级加入班级,进入班级后可以创建相册上传照片,可以留言发表评论,可以查看别人的通讯录发送小纸条,对于自己的上传的照片.相册可以进行删除操作,也可以退出班级,也可以删除自己的留言. 为了满足上面提出的功能需求,本网

基于.net mvc的校友录 开篇

这系列的博客是作为我做毕业设计的记录来弄的.因为现在的工作是嵌入式,所以,而.net在学校没有学过,更别说mvc或者是EF的codefirst了,所以,都是自学来了,都是一家之解,有不当之处,大家多提宝贵议见. 园子里的兄弟们,我这是记录而不是教程哦,请和我一样的新手看到我的文章后斟酌而行,万不可随意模仿. 好了,下面我们开始. 使用的技术: 这是毕业设计,多数人都是买来的或者是改来的,因为一个人做一个大型的网站,还是我们这样的二本底下的学校,加上还要上班,时间非常少.但是,我想做的一个原因是微

基于.net mvc的校友录 七 文件上传以及多对多关系表的LINQ查询实现

图片的上传与调用 图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginForm中这样写:@using (Html.BeginForm("ToCreate", "Class",FormMethod.Post, new { enctype = "multipart/form-data" })),用对象的形式将enctype的类

基于.net mvc的校友录 六、codefirst的使用以及班级模块的关键部分实现

通过EF将新用户存入数据库 这里,探讨一下如何使用EF的code first将数据存入数据库,以及如何对用户的密码进行md5加密与验证.下面是用户登陆的前台代码. @using (Html.BeginForm("ToLogin", "Log")) {    @Html.AntiForgeryToken()    @Html.ValidationSummary(true) <div> <div>    <section id="

基于.net mvc的校友录 二、实体模型设计

前言 已经回学校好多天了,同学们也陆陆续续地来了,多数人已经拿到了自己的毕业设计了,我看着自己的一堆设计资料,却还没有多少东西能给人看的,心里是一阵阵的焦急啊.不过,咱是后期,就老老实实地慢慢farm,总会完成的.这段时间,我把我所能用到的功能(包括权限控制.登陆检测.保存密码等等)在.net mvc4中的实现找了一遍,并且都测试了一遍,怕的是以后做的过程中被卡,就难受了,先探路,后过兵.虽然过程是痛苦的,中间包括cookies在controller中的删除,最是令人心烦,再加上filter在中

基于.net mvc的校友录 一、前台需求设计

之前已经想过好多个版本,但是,最终定在这下面这个版本上面,因为我觉得实现起来前台的模块比较固定,浮动的元素也少,因为我是那种万事用div的DS,所以,对于绝对定位相对定位,父定位,一向很DT,这种类metro的风格很方便我来实现前台,而且好看,即使不好看,也可以跟老师说,我这是为响应新元素新风格--metro!(所说不叫这名字了,这货被告了). 好了,下面进入正题,因为这是我昨天晚上加今天空余时间做的东西,多数是设计,刚刚用一会儿时间才做成图片,给供大家评指.所以,大家看的时候,用手机的同学注意

Spring MVC 原子学习法 之 web.xml 中的配置

Spring MVC  原子学习法 之  web.xml 中的配置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 由上图可以看得出,Spring-MVC 应用的配置要从 JavaWeb 的配置

web.config文件自定义配置节的使用方法的一个简单例子

web web.config文件自定义配置节的使用方法的一个简单例子用来演示的程序名为MyApp,Namespace也是MyApp 1.编辑web.config文件 添加以下内容,声明一个Section <configSections>    <section name="AppConfig" type="MyApp.AppConfig, MyApp" /> </configSections>   声明了一个叫AppConfig的