Я знаю, что это должен быть очень простой вопрос, но я новичок в java и затрудняюсь получить точный код, который мне нужен. Что мне нужно сделать, так это получить в настоящее время имя пользователя из Windows и проверить, принадлежит ли этот пользователь к определенной группе пользователей AD, которая должна быть определена в каком-либо файле конфигурации. Это очень легко сделать на C#, но я не знаю, как это сделать в JAVA. Пример кода будет замечательным. В C# я включил бы группу безопасности в App.Config в настройки приложения, тогда я смогу захватить идентификатор Windows текущего пользователя, а затем повторить все группы, к которым принадлежит пользователь, и соответствовать желаемому. Мне нужно сделать то же самое в javaКак проверить, принадлежит ли пользователь определенной группе AD в java
ответ
Если вы только заботитесь о текущем входе пользователя Windows (т. Е. Ваша программа Java будет работать в Windows) и не против использования JNA, вы можете использовать предоставленную функцию в platform.jar
, Advapi32Util#getCurrentUserGroups()
, чтобы получить группы, в которых пользователь входит.
Например:
import com.sun.jna.platform.win32.Advapi32Util;
for (Advapi32Util.Account account : Advapi32Util.getCurrentUserGroups()) {
System.out.println(account.fqn);
}
Это также имеет преимущество в том, что для Windows кэширует членство пользователей во всех группах (включая группы, содержащие другие группы пользователь является членом), когда пользователь входит в систему.
Требования здесь, кажется, своего рода неспецифическая и это начинает травить в районах, которые, вероятно, не отлично подходит для SO, но я дам ему идти в любом случае.
В конечном счете, когда ваша система будет запущена, определяется, насколько сложной будет установка. Если вы собираетесь работать на сервере под Windows, подключенном к тому же домену, с которым вы аутентифицируете, тогда вы должны посмотреть на Waffle, в котором содержится сервлет, фильтр Spring Security, плагин JAAS и несколько других способов, которыми вы может реализовать интегрированную проверку подлинности Windows, которая использует собственные методы Windows для загрузки идентификаторов Windows и связанных групп Active Directory. Это предоставит вам опыт, наиболее похожий на использование IIS и WIA с помощью приложения .NET framework. Нижняя сторона этого заключается в том, что сервер должен запускаться в системе Windows.
К сожалению, работа в среде, отличной от Windows, потребует дополнительной настройки и конфигурации. Наиболее интегрированным решением является, вероятно, Spring Security, которая имеет a Kerberos extension, способную предоставлять SPNEGO (Windows Integrated Authentication). Ссылка, приведенная выше, содержит сведения (я считаю, что они все еще актуальны) о том, что необходимо для активации фильтра Kerberos. Чтобы получить доступ к информации о группе, вам необходимо изменить значение userDetailsService
в примере security.xml
. Проще всего сделать здесь, чтобы обеспечить надлежащим образом сконфигурированный LdapUserDetailsService в качестве объекта здесь. Я не все, что испытывал с весной, но похоже, что конфигурация будет чем-то вроде (этого не хватает contextSource
).
<bean id="adUserSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<constructor-arg value="dc=domain,dc=com"/>
<constructor-arg value="(sAMAccountName={0})"/>
<constructor-arg ref="contextSource" />
</bean>
<bean id="adAuthoritiesPopulator" class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
<constructor-arg ref="contextSource"/>
<constructor-arg value="dc=domain,dc=com" />
<property name="groupSearchFilter" value="(member={0})"/>
<property name="rolePrefix" value="ROLE_"/>
<property name="searchSubtree" value="true"/>
<property name="convertToUpperCase" value="true"/>
</bean>
<bean id="userDetailsService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService">
<constructor-arg ref="adUserSearch"/>
<constructor-arg ref="adAuthoritiesPopulator"/>
</bean>
Это должно предоставить вам аутентифицированный Kerberos пользователь со связанными с ним группами.
Если весенняя безопасность неприемлема, вы можете попробовать перепрограммировать свою собственную версию, используя, возможно, Shiro и the pure-Java SPNEGO filter, но показывая пример, который потребует в основном написания программы.
Надеюсь, это поможет. После того, как вы решите подход, вероятно, уместно обратиться к более конкретным вопросам в виде вопросов типа SO.
Большое вам спасибо. Я это попробую. Этот пакет com.sun.jna.platform.win32.Advapi32Util, он включен уже в стандартную установку Java или мне нужно как-то его установить. Я новичок в Java, так что понятия не имею. – fenix2222
Кроме того, как это будет вести себя на машинах без окон? – fenix2222
@ fenix2222: он не входит в стандартный пакет Java. Это часть JNA (с которой я связан выше). Это не будет работать вообще на компьютерах, отличных от Windows, поскольку он использует API Win32 для фактического поиска (следовательно, мое предостережение в начале ответа). Если вы можете быть немного понятнее о своих требованиях, я рад помочь. – ig0774
Вы можете получить все группы без ЮНА, как это:
String groups[] = (new com.sun.security.auth.module.NTSystem()).getGroupIDs();
Очевидно, что это будет работать только на Windows, и даже на Windows, является использование com.sun * пакеты поощряться.. См. this для объяснения результата.
Это можно сделать с помощью API Java SE без непосредственного использования пакетов com.sun. *. Для доступа к этой информации используйте Java Authentication and Authorization Service (JAAS) (javax.security.auth. * И javax.security.auth.login. *). Создание JAAS config file с помощью следующей записи:
sampleApp {
com.sun.security.auth.module.NTLoginModule required debug=false;
};
Сохранить эту запись как sampleapp_jaas.config
. Затем установите системное свойство, чтобы Java искал файл конфигурации.
-Djava.security.auth.login.config==sampleapp_jaas.config
Обратите внимание, что двойной знак имеет особое значение. См. com.sun.security.auth.login.ConfigFile для получения подробной информации о заказе на загрузку.
Затем создайте LoginContext, который будет искать запись в конфигурации JAAS. Вызовите логин, чтобы заполнить тему, а затем получить доступ к принципалам, которые представляют группы пользователей.
LoginContext l = new LoginContext("sampleApp");
l.login();
try {
Subject s = l.getSubject();
for (Principal p : s.getPrincipals()) {
System.out.println(p);
}
} finally {
l.logout();
}
Используя эту установку, Java будет использовать класс com.sun.security.auth.module.NTSystem, чтобы получить информацию, но ни один из кода не будет зашито в нестандартных API.
- 1. В Django, как проверить, находится ли пользователь в определенной группе?
- 2. Определите, принадлежит ли пользователь к определенной группе AD с использованием .Net
- 3. Как проверить, принадлежит ли JCheckBox группе кнопок?
- 4. Как проверить (в шаблоне), если пользователь принадлежит к группе
- 5. Проверьте, принадлежит ли пользователь на определенной странице.
- 6. Сценарий, проверяющий, принадлежит ли пользователь группе sudo
- 7. Как определить, принадлежит ли пользователь Windows к указанной группе?
- 8. Как проверить, принадлежит ли пользователь группе пользователей Active Directory в C# .NET.
- 9. Загрузить HTML, если пользователь принадлежит к определенной группе
- 10. Проверка Если пользователь принадлежит группе В представлениях
- 11. Get-ADUser в определенной группе AD
- 12. Как проверить, принадлежит ли символ группе символов в Haskell?
- 13. Как проверить, принадлежит ли пользователь, который находится в Azure Active Directory, к определенному членству в группе?
- 14. Как проверить, находится ли пользователь Sharepoint в группе безопасности независимо от того, находится ли это в группе AD CSOM
- 15. django-auth-ldap - найти, если пользователь принадлежит группе ldap
- 16. Как программно проверить, является ли пользователь членом группы AD в группе SharePoint?
- 17. Как проверить, принадлежит ли класс Java JDK
- 18. Sharepoint: узнать, принадлежит ли текущий пользователь указанной группе
- 19. Как проверить, принадлежит ли пользователь нескольким группам в Odoo?
- 20. ASP.NET MVC проверяет, принадлежит ли пользователь группе [x]
- 21. Проверьте, принадлежит ли пользователь группе через Facebook. График API
- 22. Java LDAP - Определяет, является ли пользователь в данной группе?
- 23. Проверьте, находится ли пользователь в группе
- 24. Есть ли способ проверить членство в группе AD для компьютера?
- 25. Как проверить, является ли пользователь в группе доменов?
- 26. Определите, находится ли компьютер в группе AD
- 27. PHP: Как проверить, может ли пользователь получить доступ к определенной группе рекурсивно?
- 28. Проверить, принадлежит ли объект классу Java
- 29. Проверьте, принадлежит ли пользователь в m2m
- 30. проверить, принадлежит ли слово языку
«Мне сложно получить точный код, который мне нужен». К сожалению, это не случайно: интеграция Java с платформой разработки Windows не соответствует уровню интеграции C#. В прошлый раз, когда мне нужно было что-то сделать, мне пришлось перепрыгнуть через все виды обручей с Open LDAP (включая отладку проблемы параллелизма в коде Novell). – dasblinkenlight