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;

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移除,然后将用户转向到登陆页面。

转载请标注原地址:http://www.cnblogs.com/ensleep/tag/%E5%9F%BA%E4%BA%8E.net%20mvc%E7%9A%84%E6%A0%A1%E5%8F%8B%E5%BD%95/

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

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

    这是整个系统结构的预览,话不多说,给个图: 本网站努力为每个人提供一个有效的校友录系统,为参与者提供一个简单有效的交流互动的平台,操作上要求简单.高效,性能上要求稳定.可扩展.在对同类网站系统进行了调 ...

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

    实体模型设计 由于是实际开发,而且是时间比较紧的,所以,在开发实现过程中,总有一些对原计划的改动: AlumniBookModel数据库实体模型 这是主数据实体类,EF会根据此实体生成数据库,它的每一 ...

  3. 基于.net mvc的校友录(源程序)

    废话不多说,上程序再说: http://pan.baidu.com/s/11MnLo 我.net mvc4的正式学习时长,其实也就一个多月,期间除去玩游戏.听歌.谈恋爱,也就半个月,大神请轻喷~~ 转 ...

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

    图片的上传与调用 图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginFo ...

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

    通过EF将新用户存入数据库 这里,探讨一下如何使用EF的code first将数据存入数据库,以及如何对用户的密码进行md5加密与验证.下面是用户登陆的前台代码. @using (Html.Begin ...

  6. 在web.config里面添加配置信息

    在web.config里面添加配置信息规范文字 代码如下 在<appSettings>中间添加 <add key="Director" value="处 ...

  7. web.config文件中配置数据库连接的两种方式

    web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报    分类: 数据库(74)  在网站开发 ...

  8. IOC注入框架——Unity中Web.Config文件的配置与调用

    Unity 应用程序块可以从 XML 配置文件中读取配置信息.配置文件可以是 Windows Forms 应用程序的 App.config 或者 ASP.NET 应用程序的 Web.config.当然 ...

  9. Unity中Web.Config文件的配置与调用

    在上一篇文章“Unit简单依赖注入”我们可以实现构造对象和被依赖对象之间的 松耦合,使我们的抽象层(Player)能够保持稳定,但是在并没有把客户类和Player类之间彻底解耦,即当我们不想使用MP3 ...

随机推荐

  1. 前端开发中的SEO

    什么是SEO SEO由英文Search Engine Optimization缩写而来,中文意译为"搜索引擎优化".SEO是指从自然搜索结果获得网站流量的技术和过程,是在了解搜索引 ...

  2. nginx之keepalive

    一:设置 keepalive_timeout  0; 发curl: [xxx ~]$ curl -H "Keep-Alive: 60" -H "Connection: k ...

  3. fluentd正则表达式

    一: 匹配上则取否则不取 匹配规则为 \[sv=(?<sv>[^\]]*?)\].*?\[os=(?<os>[^\]]*?)\].*?\[net=(?<net>[^ ...

  4. poj1008_Maya_Calendar

    历法的转换. #include <stdio.h> #include <math.h> #include <string.h> ][]={ "pop&qu ...

  5. 添加favicon.ico网站文件

    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" me ...

  6. sublime搭建Java编译平台及编码问题

    Sublime自带Java编译功能,当时只能编译不能运行,我们做一下小小的修改就可以让sublime一步完成编译运行的功能,实现sublime搭建Java编译平台. 使用Ctrl + B 编译时,所编 ...

  7. MySQL 5.7.9 免安装配置

    MySQL 5.7.9 免安装配置 环境:win10 64位 mysql版本:mysql-5.7.9-winx64.zip (http://dev.mysql.com/downloads/mysql/ ...

  8. Dockpanel的控件加载问题

    1. 正确加载模式:panel.ControlContainer.Controls.Add(control); 如果用panel.Controls.Add(control);则可能出现模块发生位移问题 ...

  9. sendBroadcast 无法接收

    项目中遇到已经sendbroadcast,但是在对应的BroadcastReceiver中却无法调用onReceiver 真是个纠结的问题.找了许久. 终于发现Intent中传递了一个参数(自定义类继 ...

  10. delphi 2010是动画GIF的支持方法

    下面delphi 2010是动画GIF的支持方法:  1.在窗体上放一个Image1控件.注意:这时设置其Picture属性,加载一幅动画GIF是不会动画显示的.  2.在窗体的FormCreate事 ...