网站结构如下:
/default.aspx
/login.aspx
/adminlogin.aspx
/member/*.aspx
/admin/*.aspx
需求:访问/member/路径下的页面的请求转向到/login.aspx;
访问/admin/路径下的页面的请求被转向到/adminlogin.aspx;
<system.web> <authentication mode="Forms"> <forms loginUrl="/Login.aspx" name=".ASPXFORMSAUTH"> </forms> </authentication> </system.web> <location path="member"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> <location path="admin"> <system.web> <authentication mode="Forms"> <forms loginUrl="/AdminLogin.aspx" name=".ASPXFORMSAUTH"> </forms> </authentication> <authorization> <deny users="?"/> </authorization> </system.web> </location>
这样配置,会有 应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的,原因估计是一个应用程序中不能定义2个认证方式
最后解决办法,定义配置文件
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0"/> <authentication mode="Forms"> <forms loginUrl="Handler1.ashx" name=".ASPXFORMSAUTH"> </forms> </authentication> </system.web> <location path="Handler1.ashx"> <system.web> <httpHandlers> <add verb="*" path="Handler1.ashx" type="WebApplication2.Handler1" validate="true" /> </httpHandlers> </system.web> </location> <location path="member"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> <location path="admin"> <system.web> <authorization> <allow users="admin"/> <deny users="*"/> </authorization> </system.web> </location> </configuration>
Handler1.ashx为处理跳转的类
变通的解决了问题,但是还有新的问题,如果在member中登录了,再打开admin目录下文件,会跳转到Handler1.ashx判断跳转,但是已经被授权为member用户了,所以就不会实际跳转页面,这样只有直接访问AdminLogin.aspx登录才能授权admin用户
最好的办法还是单独建立一个网站应用程序,或者使用roles分组