programing

도메인 없이 사용자 이름을 가져오는 방법

batch 2023. 8. 19. 09:59
반응형

도메인 없이 사용자 이름을 가져오는 방법

aspx 페이지에서 기능이 있는 Windows 사용자 이름을 가져옵니다.Request.LogonUserIdentity.Name이 함수는 "domain\user" 형식의 문자열을 반환합니다.

사용자 이름만 얻을 수 있는 기능이 있습니까?IndexOf그리고.Substring,이렇게요?

public static string StripDomain(string username)
{
    int pos = username.IndexOf('\\');
    return pos != -1 ? username.Substring(pos + 1) : username;
}

Windows 인증을 사용하는 경우.이는 간단히 전화를 통해 달성할 수 있습니다.System.Environment.UserName사용자 이름만 제공됩니다.사용할 수 있는 도메인 이름만 원하는 경우System.Environment.UserDomainName

그렇게 생각하지 않습니다.나는 이전에 이 방법들을 사용하여 사용자 이름을 얻은 적이 있습니다.

var user = System.Web.HttpContext.Current.User;   
var name = user.Identity.Name;

var slashIndex = name.IndexOf("\\");
return slashIndex > -1 
    ? name.Substring(slashIndex  + 1)
    : name.Substring(0, name.IndexOf("@"));

또는

var name = Request.LogonUserIdentity.Name;

var slashIndex = name.IndexOf("\\");
return slashIndex > -1 
    ? name.Substring(slashIndex  + 1)
    : name.Substring(0, name.IndexOf("@"));

부품[1]을 얻는 것은 안전한 방법이 아닙니다.LINQ를 사용하고 싶습니다. 마지막():

WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
if (windowsIdentity == null)
    throw new InvalidOperationException("WindowsIdentity is null");
string nameWithoutDomain = windowsIdentity.Name.Split('\\').Last();

를 사용하는 경우.NET 3.5 언제든지 Windows 확장 방법을 만들 수 있습니다.이 작업을 수행하는 ID 클래스입니다.

public static string NameWithoutDomain( this WindowsIdentity identity )
{
    string[] parts = identity.Name.Split(new char[] { '\\' });

    //highly recommend checking parts array for validity here 
    //prior to dereferencing

    return parts[1];
}

코드의 어디에서나 참조만 하면 됩니다.

부탁한다.로그온 사용자 ID.도메인이 없는 이름();

static class IdentityHelpers
{
    public static string ShortName(this WindowsIdentity Identity)
    {
        if (null != Identity)
        {
            return Identity.Name.Split(new char[] {'\\'})[1];
        }
        return string.Empty;
    }
}

이 코드를 포함하면 다음과 같은 작업을 수행할 수 있습니다.

WindowsIdentity a = WindowsIdentity.GetCurrent();
Console.WriteLine(a.ShortName);

분명히 웹 환경에서는 콘솔에 글을 쓰지 않을 것입니다. 단지 예시일 뿐입니다.

다른 방법과 동일한 작업을 수행하는 다른 방법은 다음과 같습니다.

var usernameWithoutDomain = Path.GetFileName(@"somedomain\someusername")

@ 변형된 사용자 이름을 확인하지 않기 때문에 안전하지 않습니다.

정규 표현식을 사용하자고 제안했지만 너무 많이 사용할 것입니다.[시스템.끈.분할](http://msdn.microsoft.com/en-us/library/b873y76a(VS.80).aspx) 이 작업을 수행합니다.

string[] parts= username.Split( new char[] {'\\'} );
return parts[1];

언급URL : https://stackoverflow.com/questions/330320/how-to-get-username-without-domain

반응형