gpt4 book ai didi

java - 如何检查用户是否属于java中的某个AD组

转载 作者:可可西里 更新时间:2023-11-01 09:48:21 26 4
gpt4 key购买 nike

我知道这一定是一个非常简单的问题,但我是 java 的新手,发现很难获得我需要的准确代码。我需要做的是从 Windows 获取当前登录的用户名,并检查该用户是否属于需要在某些配置文件中定义的特定 AD 用户组。用 C# 很容易做到,但我不知道如何在 JAVA 中做到。示例代码会很棒。在 c# 中,我会将安全组放入 App.Config 到应用程序设置中,然后我可以获取当前登录用户的 Windows 标识,然后遍历用户所属的所有组并匹配所需的组。我需要在 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 ,它提供了一个 servlet、一个 Spring Security 过滤器、一个 JAAS 插件和一些其他方法,您可以通过这些方法实现 Windows 集成身份验证,它使用 native Windows 方法加载 Windows 身份和关联的 Active Directory 组。这将为您提供与在 .NET 框架应用程序中使用 IIS 和 WIA 最相似的体验。不利的一面是服务器需要在 Windows 系统上运行。

不幸的是,在非 Windows 环境中运行将需要更多设置和配置。最集成的解决方案可能是 Spring Security,它有 a Kerberos extension能够提供 SPNEGO(Windows 集成身份验证)。上面的链接包含有关启动和运行 Kerberos 过滤器所需的详细信息(我相信它们仍然是最新的)。要访问组信息,您需要更改示例 security.xml 文件中的 userDetailsS​​ervice 值。此处最简单的做法是提供适当配置的 LdapUserDetailsService作为这里的对象。我不是所有的 Spring 经验,但看起来配置应该是这样的(这缺少 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 身份验证的用户及其相关组。

如果 Spring Security Not Acceptable ,您可以尝试使用 Shiro 来滚动您自己的版本和 the pure-Java SPNEGO filter ,但要显示一个示例,基本上需要编写一个程序。

希望对您有所帮助。一旦您决定了一种方法,将更具体的问题作为 SO 类型的问题来解决可能是合适的。

关于java - 如何检查用户是否属于java中的某个AD组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com