pxglh 2015-05-05 02:00 采纳率: 0%
浏览 456

asp.net iis发布域登录控制

企业内部使用了域管理,客户要求主页不需要域登录也能看到,但是除了主页之外的页面就需要
域登录成功才能看见.
现在我知道怎样实现域登录并获取登录用户域里面的信息,就是不知道怎样把主页剔除开来不需要域登录就能看见.
请各位不吝赐教!!

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 19:31
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,您可以使用ASP.NET的身份验证模型。以下是一个简单的示例,说明如何在IIS中设置一个没有域登录功能的主页。

    首先,在您的应用程序根目录下创建一个新的Web.config文件,并将其命名为DefaultWeb.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <httpVersion>1.1</httpVersion>
        </system.webServer>
    </configuration>
    

    然后,您可以在这个新配置文件中添加一些自定义的HTTP请求处理器来处理主页和非域登录页面之间的差异。例如:

    <system.web>
        <compilation debug="true"/>
        <httpRuntime>
            <handlers>
                <remove name="*.ascx" />
                <!-- 新的HTTP请求处理器 -->
                <add name="NoDomainLoginHandler" verb="*" path="*.*" type="YourNamespace.NoDomainLoginHandler" preCondition="IsRequestSecure=false" />
            </handlers>
        </httpRuntime>
    </system.web>
    

    在这个例子中,我们创建了一个新的HTTP请求处理器NoDomainLoginHandler,它将匹配所有请求(包括GET、POST等),并且只接受安全请求。这将阻止任何来自未授权域的请求访问此页面。

    接下来,您需要在NoDomainLoginHandler.cs中编写处理逻辑,以检查是否允许从指定的IP地址或源发起请求。例如:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.Security;
    
    namespace YourNamespace
    {
        public class NoDomainLoginHandler : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                if (context.Request.IsLocal)
                {
                    // 这里可以添加更多的验证逻辑,例如检查IP地址或来源。
                    context.Response.Write("This is a local request.");
                    return;
                }
    
                var userIdentity = User.Identity as ClaimsIdentity;
                if (userIdentity != null && userIdentity.IsAuthenticated)
                {
                    // 用户已登录,无需进行额外验证
                    context.Response.Redirect("/Home");
                    return;
                }
                else
                {
                    // 请求未通过身份验证,跳转到登录页面
                    context.Response.Redirect("~/Account/Login");
                }
            }
    
            public bool IsReusable { get { return true; } }
        }
    }
    

    最后,确保在应用程序的启动脚本中启用这个新的HTTP请求处理器:

    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterHttpHandler(typeof(NoDomainLoginHandler), "NoDomainLoginHandler", "NoDomainLoginHandler", new HandlerOptions());
    }
    

    现在,当您在浏览器中访问没有域名登录的页面时,系统将直接重定向到登录页面,而不会检查用户的权限。如果您想要进一步地处理未授权的请求,可以根据需要修改ProcessRequest方法中的验证逻辑。

    评论

报告相同问题?