基于.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;
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实现的权限控制)的更多相关文章
- 基于.net mvc的校友录(四、系统结构图)
这是整个系统结构的预览,话不多说,给个图: 本网站努力为每个人提供一个有效的校友录系统,为参与者提供一个简单有效的交流互动的平台,操作上要求简单.高效,性能上要求稳定.可扩展.在对同类网站系统进行了调 ...
- 基于.net mvc的校友录(三、实体模型实现)
实体模型设计 由于是实际开发,而且是时间比较紧的,所以,在开发实现过程中,总有一些对原计划的改动: AlumniBookModel数据库实体模型 这是主数据实体类,EF会根据此实体生成数据库,它的每一 ...
- 基于.net mvc的校友录(源程序)
废话不多说,上程序再说: http://pan.baidu.com/s/11MnLo 我.net mvc4的正式学习时长,其实也就一个多月,期间除去玩游戏.听歌.谈恋爱,也就半个月,大神请轻喷~~ 转 ...
- 基于.net mvc的校友录(七、文件上传以及多对多关系表的LINQ查询实现)
图片的上传与调用 图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginFo ...
- 基于.net mvc的校友录(六、codefirst的使用以及班级模块的关键部分实现)
通过EF将新用户存入数据库 这里,探讨一下如何使用EF的code first将数据存入数据库,以及如何对用户的密码进行md5加密与验证.下面是用户登陆的前台代码. @using (Html.Begin ...
- 在web.config里面添加配置信息
在web.config里面添加配置信息规范文字 代码如下 在<appSettings>中间添加 <add key="Director" value="处 ...
- web.config文件中配置数据库连接的两种方式
web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报 分类: 数据库(74) 在网站开发 ...
- IOC注入框架——Unity中Web.Config文件的配置与调用
Unity 应用程序块可以从 XML 配置文件中读取配置信息.配置文件可以是 Windows Forms 应用程序的 App.config 或者 ASP.NET 应用程序的 Web.config.当然 ...
- Unity中Web.Config文件的配置与调用
在上一篇文章“Unit简单依赖注入”我们可以实现构造对象和被依赖对象之间的 松耦合,使我们的抽象层(Player)能够保持稳定,但是在并没有把客户类和Player类之间彻底解耦,即当我们不想使用MP3 ...
随机推荐
- shp地图解析(不用AE)
AE太重型,还收费,如果只是加载地图作为底图,可以用纯C#实现.线类型用得最多,以下是线类型的数据结构: 总体架构 文件头 记录头 记录内容 记录头 记录内容 ............ 记录头 记录内 ...
- 手机连上wifi热点后自动弹窗的功能
使用buildroot编译bind DNS服务器 用buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以直接添加到文件系统里边,如常 ...
- C# 集合 — Hashtable 线程安全
基础知识重要吗?真的很重要. 就在笔者与同事聊天中突然同事提出一个问题,让笔都有点乱了手脚(有点夸张),题目是这样的: 问:Hashtable 是线程安全的吗? 答:…… (沉默中,Yes Or No ...
- SQLServer附加数据库5120错误
装有MSSQL的电脑 需要附加的数据库文件(*.mdf)及其日志文件(*.ldf) 1. 打开SQL Server Management Studio,并连接上数据库.右键"数据库" ...
- c语言学习的第五天
#include<stdio.h> #include<stdbool.h> int main() { _Bool num=1; if (num==true); { printf ...
- nginx+php与apache+php性能对比
测试工具http_load相同的动态页面测试,相同的硬件资源,相同并发,相同请求数量的前提下,nginx+php比apache+php的性能要 差,而且如果请求的压力大于硬件资源的承受能力,nginx ...
- Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法
前言 我在实验进入linux系统启动xwindow server而不启动KDE GNOME等桌面系统时遇到的问题.只启动x server而不启动桌面系统,在xserver之上运行一个全屏的图形界面程序 ...
- Nginx下10个安全问题提示
Nginx是当今最流行的Web服务器之一.它为世界上7%的web流量提供服务而且正在以惊人的速度增长.它是个让人惊奇的服务器,我愿意部署它 下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你的 ...
- CSS3常用功能的写法
随着浏览器的升级,CSS3已经可以投入实际应用了. 但是,不同的浏览器有不同的CSS3实现,兼容性是一个大问题.上周的YDN介绍了CSS3 Please网站,该网站总结了一些常用功能的写法. 以下就是 ...
- APK反编译之一
初步接触APK反编译.刚刚使用android-apktool软件反编译了一下QQ.apk,目的只是想看看QQ这个应用软件是内部是如何设计的,希望可以在某些方面借鉴一下.下面就如何反编译做一个简单的记录 ...