gpt4 book ai didi

java - 如何将 AD 组映射到用户角色 Spring Security LDAP

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:24 26 4
gpt4 key购买 nike

我有一个使用 Java Spring MVC 构建的 Web 应用程序。

我只是设置连接到 LDAP 服务器以进行身份​​验证的 spring security。

我已成功设置它,以便我能够登录我的应用程序,但我找不到任何东西可以帮助我将 AD 组映射到 Java 中的用户角色,因为我只能获得 403 禁止访问的页面即我已经通过身份验证,但还没有权限。

我目前有:

<http auto-config="true">
<intercept-url pattern="/**" access="ROLE_USER" />
</http>

<ldap-server id="ldapServer" url="LDAPURL" manager-dn="USER" manager-password="PASSWORD" />

<authentication-manager >
<ldap-authentication-provider
group-search-base="OU=GROUPS"
group-search-filter="sAMAccountName={0}"

user-search-base="OU=USERS"
user-search-filter="sAMAccountName={0}"

/>
</authentication-manager>

假设该用户是 AD 组 g-group-UK-user 的一部分,然后我希望能够将该 AD 组映射到 ROLE_USER,这样用户就可以看到整个网络应用程序。

我似乎只能找到非常简单的示例,其中组是 ADMIN 或 USER,在这种情况下,前缀 ROLE 只是添加到组中,或者其他方法似乎正在使用 UserDetailContextMapper 但我找不到明确的用途

最佳答案

为此,我在身份验证管理器中使用了以下内容:

user-context-mapper-ref="customUserContextMapper"

然后我使用以下类来检查该用户是否属于某个 AD 组,然后将 ROLE_USER 角色分配给他们的权限:

@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities)
{

Attributes attributes = ctx.getAttributes();
Object[] groups = new Object[100];
groups = ctx.getObjectAttributes("memberOf");

LOGGER.debug("Attributes: {}", attributes);

Set<GrantedAuthority> authority = new HashSet<GrantedAuthority>();

for(Object group: groups)
{

if (group.toString().toLowerCase().contains("AD_GROUP_NAME".toLowerCase()) == true)
{
authority.add(new SimpleGrantedAuthority("ROLE_USER"));
break;
}
}

User userDetails = new User(username, "", false, false, false, false, authority);
return userDetails;
}

请注意,该类比平时稍微复杂一些,因为我连接的 LDAP 服务器的结构与平时不同,因为用户有权访问的组存储在用户下的属性中,而不是换句话说,一个组会将属于它的所有用户作为一个属性。

关于java - 如何将 AD 组映射到用户角色 Spring Security LDAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27798607/

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