Глядя на исходный код этого драгоценного камня, похоже, что есть Report#as_json
, который возвращает то, что вы ищете.
Bugsnag.before_notify_callbacks << lambda { |report|
puts report.as_json
}
Вы работаете в .NET 3.5? Если это так - AD имеет замечательные новые функции в .NET 3.5 - прочтите эту статью Управление принципами безопасности каталогов в .NET 3.5 Итана Вилански и Джо Каплана.
Одна из больших новых функций - это " PrincipalSearcher "класс, который должен значительно упростить поиск пользователей и / или групп в AD.
Если вы не можете использовать .NET 3.5, одна вещь, которая может облегчить вашу жизнь, называется" Неоднозначное разрешение имен ", и это"
System.DirectoryServices имеет два пространства имен ... DirectoryEntry и DirectorySearcher.
Более подробную информацию о DirectorySearcher можно найти здесь:
http://msdn.microsoft.com/en-us/ library / system.directoryservices.directorysearcher.aspx
Затем вы можете использовать свойство Filter для фильтрации по группам, пользователям и т. д ...
Поэтому, если вы хотите фильтровать по имени учетной записи, вы должны установить .Filter на:
"(&(sAMAccountName=bsmith))"
и запустите метод FilterAll. Это вернет коллекцию SearchResultCollection, которую вы можете просмотреть и получить информацию о пользователе.
Добавить к ответу Мияги ....
Вот фильтр / запрос для применения к DirectorySearcher
DirectorySearcher ds = new DirectorySearcher();
ds.Filter = "samaccountname=" + userName;
SearchResult result = ds.FindOne();
Вам необходимо построить строку поиска на основе того, как вы ищете пользователя.
using (var adFolderObject = new DirectoryEntry())
{
using(var adSearcherObject = new DirectorySearcher(adFolderObject))
{
adSearcherObject.SearchScope = SearchScope.Subtree;
adSearcherObject.Filter = "(&(objectClass=person)(" + userType + "=" + userName + "))";
return adSearcherObject.FindOne();
}
}
userType должен быть либо sAMAccountName, либо CN, в зависимости от того, как отформатировано имя пользователя.
ex :
firstname.lastname (или flastname) обычно будет sAMAccountName
FirstName LastName обычно будет CN
То, что вы сделали, довольно разумно. Несколько дополнительных пунктов:
Когда Maven получает артефакт от Nexus, артефакт называется artifactId-version. GroupId досадно опущен. Итак, когда артефакт перемещается (например, копируется в WEB-INF / lib в веб-приложении), ваш файл jar будет читать « gdata-analytics-1.0 ». Обычно это не проблема. Однако, если имя артефакта очень распространено, например «util», вы можете включить информацию о группе внутри artifactId, например, используя groupId из « com.google » и artifactId из « com.google.gdata-аналитика ». Да, повторение раздражает, но дает максимальную ясность в файловой системе и при поиске. Я' На самом деле у нас была проблема, когда два разных идентификатора группы имели jar « core-1.0 », и один перезаписывал другой при копировании в каталог lib во время сборки.
Я повторяю предложение MattK по выравниванию ваш Maven versionId с любой версией, под которой широко известен артефакт.
Если вы последуете совету Доминика о добавлении к groupId префикса groupId с названием вашей компании (например, acme), это может облегчить использование функции маршрутизации Nexus. Это гарантирует, что запросы на внутренние артефакты не будут переданы в Maven Central и попадут в их журналы (что может быть важно, если ваш groupId равен « acme.secret.project »!
public DirectoryEntry Search(string searchTerm, string propertyName)
{
DirectoryEntry directoryObject = new DirectoryEntry(<pathToAD>);
foreach (DirectoryEntry user in directoryObject.Children)
{
if (user.Properties[propertyName].Value != null)
if (user.Properties[propertyName].Value.ToString() == searchTerm)
return user;
}
return null;
}
и один перезаписывал другой при копировании в каталог lib во время сборки.
Я повторяю предложение MattK по согласованию вашего Maven versionId с той версией, по которой артефакт широко известен.
Если вы последуете совету Доминика о добавлении префикса groupId с названием вашей компании (например, acme), это может упростить использование функции маршрутизации Nexus. Это гарантирует, что запросы на внутренние артефакты не будут переданы в Maven Central и попадут в их журналы (что может быть важно, если ваш groupId равен « acme.secret.project »!
public DirectoryEntry Search(string searchTerm, string propertyName)
{
DirectoryEntry directoryObject = new DirectoryEntry(<pathToAD>);
foreach (DirectoryEntry user in directoryObject.Children)
{
if (user.Properties[propertyName].Value != null)
if (user.Properties[propertyName].Value.ToString() == searchTerm)
return user;
}
return null;
}
и один перезаписывал другой при копировании в каталог lib во время сборки.
Я повторяю предложение MattK по согласованию вашего Maven versionId с той версией, по которой артефакт широко известен.
Если вы последуете совету Доминика о добавлении префикса groupId с названием вашей компании (например, acme), это может упростить использование функции маршрутизации Nexus. Это гарантирует, что запросы на внутренние артефакты не будут переданы в Maven Central и попадут в их журналы (что может быть важно, если ваш groupId равен « acme.secret.project »!
public DirectoryEntry Search(string searchTerm, string propertyName)
{
DirectoryEntry directoryObject = new DirectoryEntry(<pathToAD>);
foreach (DirectoryEntry user in directoryObject.Children)
{
if (user.Properties[propertyName].Value != null)
if (user.Properties[propertyName].Value.ToString() == searchTerm)
return user;
}
return null;
}
Совет по добавлению к groupId префикса названия вашей компании (например, acme) может облегчить использование функции маршрутизации Nexus. Это гарантирует, что запросы на внутренние артефакты не будут переданы в Maven Central и попадут в их журналы (что может быть важно, если ваш groupId равен « acme.secret.project »!
-121) --- 4350900- public DirectoryEntry Search(string searchTerm, string propertyName)
{
DirectoryEntry directoryObject = new DirectoryEntry(<pathToAD>);
foreach (DirectoryEntry user in directoryObject.Children)
{
if (user.Properties[propertyName].Value != null)
if (user.Properties[propertyName].Value.ToString() == searchTerm)
return user;
}
return null;
}
Совет по добавлению к groupId префикса названия вашей компании (например, acme) может облегчить использование функции маршрутизации Nexus. Это гарантирует, что запросы на внутренние артефакты не будут переданы в Maven Central и попадут в их журналы (что может быть важно, если ваш groupId равен « acme.secret.project »!
-121) --- 4350900- public DirectoryEntry Search(string searchTerm, string propertyName)
{
DirectoryEntry directoryObject = new DirectoryEntry(<pathToAD>);
foreach (DirectoryEntry user in directoryObject.Children)
{
if (user.Properties[propertyName].Value != null)
if (user.Properties[propertyName].Value.ToString() == searchTerm)
return user;
}
return null;
}
Получил это от Джо Каплан и Итан Вилански Статья Используйте это Использование (из ссылки на dll System.DirectoryServices.AccountManagement):
using System.DirectoryServices.AccountManagement;
private bool CheckUserinAD(string domain, string username)
{
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain);
UserPrincipal user = new UserPrincipal(domainContext);
user.Name = username;
PrincipalSearcher pS = new PrincipalSearcher();
pS.QueryFilter = user;
PrincipalSearchResult<Principal> results = pS.FindAll();
if (results != null && results.Count() > 0)
return true;
return false;
}