描述:在开发中我们通常会碰到这样的问题,例如:在项目的根目录下面有一个文件或者文件夹需要用户登陆后才能访问。如果用户在没有登录的情况下访问该文件或者该文件夹下面的文件时,直接拦截重定向到对应的登陆页面。

例一:

我想让用户在访问我的程序的Admin文件夹下的页面时需要登录,而在访问其他页面时则不需要,也就是说Admin文件夹下的文件拒绝匿名访问.

下面是配置根目录下的web.config文件中关于授权验证的配置。

  1. <system.web>
  2. <authentication mode="Forms"><!--默认状态下位Windows-->
  3. <forms loginUrl="Admin/Login.aspx" name=".ASPXFORMSAUTH"></forms>
  4. </authentication>
  5. <authorization>
  6. <allow users="*"/><!--允许任何访问者访问-->
  7. </authorization>
  8. </system.web>
  9. <location path="Admin"><!--注意:该节点最好跟在</system.web>之后,尽管这两个节点可能在web.config文件中相隔比较远,不要觉得有什么疑惑。下面是对Admin文件夹的访问权限的配置。-->
  10. <system.web>
  11. <authorization>
  12. <deny users="?"/><!--阻止匿名用户访问-->
  13. </authorization>
  14. </system.web>
  15. </location>

注意location节,location节不需要<authorization>节了,假若加了的话,便会出现"在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' "这样的错误了,若在子文件下添加配置文件时也要注意相同的问题.    这样,当你在地址栏里面直接访问Admin下的任意(非Login.aspx文件)时,将会被重定向到Admin文件夹下的Login.aspx页面。

那到底是如何通过Login.aspx登陆页面授权的呢(被授权后就可以访问Admin文件夹下面的文件了)?

Login.aspx页面的后台代码:

  1. if (userName == "xzl" && pwd == "000")
  2. {
  3. FormsAuthentication.RedirectFromLoginPage(userName, false);//授权(这里是关键)
  4. Response.Redirect("Main.aspx");//通过上面授权后,用户名为xzl的的用户就可以访问Admin文件夹下面的Main.aspx文件了
  5. }

当通过上面方式授权成功后,可以通过如下代码来访问登录的用户名:

  1. //如果登录成功
  2. if (User.Identity.IsAuthenticated)
  3. {
  4. //输出登录名
  5. string userName = User.Identity.Name;//获取登录名
  6. Response.Write("欢迎管理员:" + userName + "登录!");
  7. }

当然,也可以通过代码来安全推出:

  1. System.Web.Security.FormsAuthentication.SignOut();

例二:

上面的方式是“集中管理”的方式,也就是说在一个配置文件中配置所有页面的访问权限,这儿再介绍一下分散管理的方式,即通过多个web.config来配置文件的访问权限。

首先,web.config的作用我们应该知道两点:

1、web.config的设置将作用于所在目录及所在目录下的所有子文件下的资源——一般指.net资源,如aspx、ashx、ascx等文件,对.html、js、css等则不起作用,当然,不同的iis版本下有所不同,在此不做讨论。

2、子目录下的web.config文件将覆盖从父目录继承下来的设置。

接下来,我们新建一个测试项目,项目资源如下图:

上图中的Admin文件夹是受保护的,只有通过省份验证的用户可以访问,所以,我们在根目录下的web.config配置文件中做如下配置:

  1. <authentication mode="Forms"><!--Forms验证-->
  2. <forms loginUrl="~/Admin/Login.aspx" name=".ASPX"></forms><!--未通过则转向Login.aspx登录页-->
  3. </authentication>
  4. <authorization><!--授权:对于此目录及此目录以下的所有资源-->
  5. <allow users="*"/><!--允许所有用户访问-->
  6. </authorization>

上面配置的信息是,根目录及根目录下的所有资源允许匿名用户访问,这显然不符合我们的要求,但是,我们根据上面2点认知中的第2点知道,可以通过重写web.config配置来覆盖父目录提供的规则,因此,我们可以在Admin文件夹中新建一个web.config文件来配置Admin文件夹的访问授权规则,如下:

  1. <configuration>
  2. <system.web>
  3. <authorization><!--授权-->
  4. <deny users="?"/><!--阻止匿名用户访问-->
  5. </authorization>
  6. </system.web>
  7. </configuration>

如此以下,我们就通过“分散管理”的方式配置好了项目的访问规则。

asp.net项目中通过Web.config配置文件及文件夹的访问权限!的更多相关文章

  1. asp.net项目中通过Web.config配置文件及文件夹的访问权限---forms

    十分全面的forms验证配置: http://blog.csdn.net/qingyun1029/article/details/6184723

  2. 在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串

      1.在<connectionStrings> 标签里添加连接 <connectionStrings> <add name="ConnectionName&q ...

  3. Asp.net中的web.config配置文件(转)

    最近开始学习.NET的开发,首先碰到的就是web.config的配置问题,把网上大虾的资料转发记录一下,以备不时之需. 原贴路径如下:http://blog.csdn.net/hbqhdlc/arti ...

  4. 解决myeclipse项目中,多出的WebContent文件夹

    由于通过svn导入项目,导致项目中多出WebContent文件夹,而在此之前正常的是WebRoot文件夹.这个WebContent删了之后还会自己冒出来. 直到我发现篇博客:http://blog.s ...

  5. 【IDEA】关于 IDEA 中新建 web 项目的 webapp 文件夹没有小蓝点 ,启动服务,访问不到解决方案

    问题描述: 新建的 maven 的 Module 项目,webapp 文件夹也是在创建完项目后手动添加的,出现了 webapp 文件夹不能被识别的情况. 解决方案: 第一步:  选中项目按 F4 键, ...

  6. C#中对Web.Config、App.Config字符串加密与解密的方法

    我们平常的项目里面的配置文件通常都是明文形式的存在,现在就是为了项目安全性增强,同时又显得高逼格点, 我们可以采用加密的方式,而我们C#很强大,因为他内置的一些指令方式,很方便而且使用起来还不用解密, ...

  7. NET Core 导入web.config配置文件

    1.首先需要在NET Core项目中引入System.Configuration.ConfigurationManager,它可以读取web.config中的相关配置信息. 2. 将web.confi ...

  8. .net 项目中应用Web Services(vs2012)

    一.在asp.net项目中添加Web services1.新建一个asp.net项目(目前尚未验证是否可以在MVC项目中添加)2.在项目名上右击,选择添加→新建项→Web服务,输好名称后确定即可 二. ...

  9. MVC 中如果js,css文件放到视图文件夹无法访问的解决办法

    在视图配置文件web.config 中添加如下节点,注意:此web.config 是视图文件夹中的,在你的views视图中可以找到<system.webServer>开头的<hand ...

随机推荐

  1. telnet测试制定地址端口号

    cmd下,命令 telnel+空格+ip或者网站+空格+端口号 端口可以用: 需要开通windows服务:

  2. javaURL中文乱码的问题

     中文乱码在java中URLEncoder.encode方法要调用两次解决   一.场景: 1.我在客户端要通过get方式调用服务器端的url,将中文参数做utf-8编码,需要在js中两次的进行编码, ...

  3. Struts2应用流程注解

    当Web容器收到请求(HttpServletReques   t)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器. 经过Other filters(SiteMe ...

  4. 【XLL API 函数】xlSheetId

    查找命名的工作表ID,用于外部引用. 原型 Excel12(xlSheetId, LPXLOPER12 pxRes, 1, LPXLOPER12 pxSheetName); 参数 pxSheetNam ...

  5. 【XLL API 函数】xlCoerce

    将 XLOPER/XLOPER12 转换为另一种类型,或是查询表格中的单元格值. 函数原型 Excel12(xlCoerce, LPXLOPER12 pxRes, 2, LPXLOPER12 pxSo ...

  6. 好用的php类库和方法

    1, /** * 将一个平面的二维数组按照指定的字段转换为树状结构 * * 用法: * @code php * $rows = array( * array('id' => 1, 'value' ...

  7. ubuntu下deb包的安装方法

    ubuntu下deb包的安装方法 简介 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian P ...

  8. 解决springmvc 前台取不到值

    查看web.xml 如果为web-app_2_3.xsd  spring不支持 修改项目为web-app_2_4.xsd

  9. 对于大一学习计算机的新手(c/c++ )提出一些学习经验

    对于刚刚上大一的新手,且是那种十分有上进的学生,在学习计算机的过程中必然会有一大堆的困惑,比如: 1 .如何学好编程(这与以往的应试教育完全不同,按照以往的那种学习方式,看书刷题不过是成为一个考试学霸 ...

  10. 开启后台 Service 闪退

    04-29 15:36:23.395: E/ActivityThread(15275): Performing stop of activity that is not resumed: {com.e ...