该文讲解了通过web.config配置文件配置项目下文件夹的访问权限问题。
新建一个web运用程序,项目结构如下:
其中Manager文件夹的ASP.NET页面属于管理员操作页面,所有只用通过登录并授权后才能访问,而根目录下面的ASP.NET页面则任何用户都可以访问,如Default.aspx页面。
首先修改根目录下的web.config配置文件,将默认的windows验证方式修改为Forms验证方式。在web.config配置文件中,将
修改为:
然后在Manager文件下面添加新的web.config配置文件,该文件旨在重写外面的web.config——配置同级目录下的asp.net资源访问权限(在图中可以看到项目下有两个web.config配置文件),修改新添加的配置文件,修改结果如下:
至此,配置文件都修改完成了,但是还需要有登录授权部分。
下面我们通过Manager文件下面的Login.aspx登录页面给通过验证的用户授权。
在Login.aspx的登录按钮的单击事件里
至此全部完成!
另外,以前写过一篇关于通过web.config文件配置项目中文件的访问权限的blog,有兴趣的朋友可以对比一下。
描述:在开发中我们通常会碰到这样的问题,例如:在项目的根目录下面有一个文件或者文件夹需要用户登陆后才能访问。如果用户在没有登录的情况下访问该文件或者该文件夹下面的文件时,直接拦截重定向到对应的登陆页面。
例一:
我想让用户在访问我的程序的Admin文件夹下的页面时需要登录,而在访问其他页面时则不需要,也就是说Admin文件夹下的文件拒绝匿名访问.
下面是配置根目录下的web.config文件中关于授权验证的配置。
注意location节,location节不需要
这样,当你在地址栏里面直接访问Admin下的任意(非Login.aspx文件)时,将会被重定向到Admin文件夹下的Login.aspx页面。
那到底是如何通过Login.aspx登陆页面授权的呢(被授权后就可以访问Admin文件夹下面的文件了)?
Login.aspx页面的后台代码:
当通过上面方式授权成功后,可以通过如下代码来访问登录的用户名:
例二:
上面的方式是“集中管理”的方式,也就是说在一个配置文件中配置所有页面的访问权限,这儿再介绍一下分散管理的方式,即通过多个web.config来配置文件的访问权限。
首先,web.config的作用我们应该知道两点:
1、web.config的设置将作用于所在目录及所在目录下的所有子文件下的资源——一般指.net资源,如aspx、ashx、ascx等文件,对.html、js、css等则不起作用,当然,不同的iis版本下有所不同,在此不做讨论。
2、子目录下的web.config文件将覆盖从父目录继承下来的设置。
接下来,我们新建一个测试项目,项目资源如下图:
上图中的Admin文件夹是受保护的,只有通过省份验证的用户可以访问,所以,我们在根目录下的web.config配置文件中做如下配置:
如此以下,我们就通过“分散管理”的方式配置好了项目的访问规则。
相关阅读:ASP.NET 安全认证(一)—— 如何运用 Form 表单认证
web.config设置Form验证允许匿名访问某个目录
在使用asp:login控件做登录界面中,在没有登录之前,所有CSS,图片是不能访问的,如果登录之后再回到 login.aspx 页面应该是可以显示的。解决方法
在 web.config 里将的图片文件夹或者图片使用<location>标记设置允许匿名访问即可。
如下面的例子中,我将Account文件夹下的图像文件夹Image设置为可以匿名访问了,这样就可以在做登录界面时使用这些图片素材了。