zoukankan      html  css  js  c++  java
  • 使ASP.NET网站Forms验证可以指定多个登录页面

    网站结构如下:
        /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分组

    示例程序https://files.cnblogs.com/FlyCat/FormsSample.zip

  • 相关阅读:
    MySQL之自增长
    MySQL字符集和校对规则
    关于MySQL安装目录bin下工具的详解
    Linux下载安装配置FTP
    Linux和Windows平台安装MySQL的两种方式
    kali安装linux-header
    Mysql之事务
    Linux之ps命令
    Linux之dd命令
    python爬虫之xpath的基本使用
  • 原文地址:https://www.cnblogs.com/FlyCat/p/2624508.html
Copyright © 2011-2022 走看看